Android関連のことを調べてみた2020年09月12日

Android関連のことを調べてみた2020年09月12日
目次

Androidエミュレータが起動しない場合の解決法メモ

# どんな内容か?
Xamarinを利用していて、Androidの最近のVersionでテストする必要がありました。デバイスマネージャで新しいデバイスを追加したのですが、起動できずに困った話です。一応の解決方法が分かったのでメモしておくことにしました。同じ悩みを抱えた方の助けとなれば幸いです。全ての起動できない現象に一致する訳ではありません。

# 環境
OS:Windows10
開発環境:Visual Studio 2019 Community Version 16.7.3

# 現象
デバイスマネージャで、Andoird9.0(API28)のOSまでは起動するのですが、それ以上のAndroid10.0(API29)やAndroid11.0(API30)が起動できません。詳しく書くと、エミュレータのスマホ枠は表示されるのですが、1秒くらいですぐに消えてダウンしてしまう状況です。
image.pngavdmanagerを実行し「Exception in thread “main” java.lang.NoClassDefFoundError」が発生した場合の対処法

FlutterでAndroidの開発環境を構築する際、**`avdmanager`**をcliから実行すると下記のようなエラーが発生した際の備忘録です。

“`shell
$ ~/Library/Android/sdk/tools/bin/avdmanager list
Exception in thread “main” java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.j

元記事を表示

【Android】XMLに1行追加でImageButtonにエフェクトを付加する

ImageButtonにおいて`android:background=”@null”`としてしまうと,タップ時のエフェクトが表示れません。
「imagebutton エフェクト」で検索すると割と手間がかかる方法がヒットするのですが,
別にエフェクトのデザインに拘らない場合,レイアウトファイルに1行追加するだけで簡単にimagebuttonにエフェクトを追加することができます。
ImageButtonの養素に以下を追加するだけです

“`xml
android:background=”?android:attr/selectableItemBackgroundBorderless”
“`
もし,背景を既に設定して変えたくない場合,foregroundも指定できます。

以下,サンプルです

“`xml

元記事を表示

AWS AmplifyでS3のBucket名を取得する [メモ]

## はじめに
基本は自分のための備忘録だが、誰かの参考になれば幸い。
なお、クイックハックです。正式なやり方ではないと思うのでご注意を。

## 動機
AWSのAmplifyを使ってモバイルアプリを作ることになったが、使いやすい半面、小回りがきかなそうで困ってる。

### すごいざっくりのAmplify概要
Amplifyは、CLIから簡単にバックエンドを構築できて、そのバックエンドへのアクセス方法をライブラリが隠蔽するので、開発者はその詳細を知らなくてもアクセス出来るというところがメリット。

また、Dev -> Prodの2Stageで開発するときに、アプリで使うバックエンドを下記のコマンドでDev用、Prod用に切り替えることが出来る。当然、開発者はバックエンドの詳細を知らなくてもよい。

“`
$ amplify env checkout
“`

### 困ってること
詳細が隠蔽されているので、バックエンドのリソース名が取れない(ようにみえる)。
例えば、バケット名を表示したいと思っても、のバケット名を取得する方法がない(ようにみえる)。

~~具体的に

元記事を表示

SPAJAMでAITalkを使ったのでメモ

仕事が忙しかったり、顔にできたできものがすごく腫れて寝込んだりしたので、もっと早く書こうと思ってたけど、SPAJAMが終わって2週間ほどたってしまった^^;

さて、SPAJAMでは協賛企業さんがツールなどを予選や本選の2日間のみ利用できるように開放してくれます。
今回、AITalkを使ったのですが、Androidで利用するサンプルもなかったので、メモとして残しておきます。
来年も使うかもしれないしね。
雑なメモですが、誰かの参考なったら、これ幸いかと。

Kotlinで書いていますが、まだKotlin勉強中なので、変な書き方をしているかもしれません。
ご了承くださいm(_ _)m

#AITalkとは?

オフィシャルの[AITalkとは](https://www.ai-j.jp/about/)を読んでいただくのが一番なんですが、音声合成エンジンですね。
ボカロのしゃべらす版といったところでしょうか?
感情表現もできることが特徴です。
Web APIを呼び出して音声をダウンロードするような感じです。

#Androidで使う
AITalkを使うには、HTTP通信を行う必要があります。

元記事を表示

android 10以降 外部ストレージの画像削除時の対応

# 概要
他のアプリが保存したメディアファイルを、アプリから削除しようとした際にAndroid 9では削除できましたが、Android 10では削除できませんでした。
Android 10(TargetSDK 29)以降では、アプリが保存した画像等のメディアファイル以外は直接削除できないようになっているようなのでその対応についてまとめてみました。
https://developer.android.com/training/data-storage/files/external-scoped?hl=ja

## Android 10でアプリからストレージ内の画像を削除する
Android 10でMediaStoreの画像や動画をcontentResolver.delete()で削除しようとするとRecoverableSecurityExceptionが発生する

“`kotlin:sample.kt
fun delete() {
contentResolver.delete(fileUri, null, null)
}
“`
実行するとRecoverableSecurit

元記事を表示

Android 11のPackage visibilityへの対応

Android11からはPackageManagerを使ってqueryIntentActivitiesなどで他のアプリがインストールされているか調べるのに制限がかかります。
targetSdkVersionを30にすると、デフォルトでは一部のシステムアプリしか結果が返ってきません、どのようなアプリを調べるのかの宣言が必要になります。

要するに以下の内容です。
https://developer.android.com/preview/privacy/package-visibility?hl=ja

宣言方法は2種類あります。
以下のように、調べたいパッケージ名を指定するか、

“`xml:AndroidManifest.xml

元記事を表示

RxJava2CallAdapterFactoryをaddしたRetrofit Clientで返り値Call型が指定されたAPI定義を実行するとどうなるか?

こんな感じでRetorfit Clientを作成しているコードがあるとする。

“`kotlin
val retrofitClient = Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
“`

`addCallAdapterFactory`で`RxJava2CallAdapter`を追加しているため、このクラインとでは次のようなObservable型を返すようなAPI定義を実行した際にレスポンスをObservableとして扱える。

“`kotlin
interface SmapleAPI {
@GET(“foo/bar”)
fun getSampleResponse(): Observable
}
“`

この時、次のCall型を返すようにAPI定義し`RxJava2CallAdapter`を追加したクライア

元記事を表示

Android, Kotlin: テストコードを書く

– Minimum SDK: API 23
– Android Studio 4.0.1
– Kotlin 1.4.0

以前、Androidのテストを、UnitTestにて実施しようとしました。
※[AndroidでのUnitTestざっくり入門](https://qiita.com/nozaki-sankosc/items/538fe9b2a13aa7403df6)

ですが、Realmが絡んだテストが実施できず、またRealmの実行を含んだオブジェクトのモック化もうまくいきませんでした。(元の処理が実行されてしまいました。)

なので、方針を変更しInstrumentedTest(androidTest)の方でテストケースを実施するようにします。

やりたいことは次のこととなります。

– 表示の確認
– 入力値の確認
– データベースに格納されているかの確認
– 画面遷移:次のActivityにIntentが渡されているかの確認

## 準備

Realmの準備はこちらを参照:[Android,KotlinでRealm](https://qiita.com/nozaki-san

元記事を表示

2. 【Android/Kotlin】ボタン追加

#はじめに
DreamHanksのMOONです。

前回はAndroid開発ツールのAndroid Studioをインストールしました。
https://qiita.com/DreamHanks/items/ad6e8002044dcca26bf7

今回はアプリの画面にボタンを追加し、そのボタンにイベント機能を追加してみます。

#Viewの概要
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708649/d8341add-1dc4-cf90-eb81-85b20929634f.png)
View オブジェクトは、通常は「ウィジェット」と呼ばれ、Button や TextView などの多数のサブクラスの 1 つです。ViewGroup オブジェクトは、通常は「レイアウト」と呼ばれ、LinearLayout や ConstraintLayout などの異なるレイアウト構造を提供する多数のタイプの 1 つです。

詳細な概要は、
https://developer.android.com/gui

元記事を表示

Android(ネイティブ)で開発とflutterで開発の比較

## はじめに
モバイルエンジニア歴2年の若手です。
この2年でAndroid開発とflutterでの開発の両方に携わることが出来たので、それを通して感じたことを書いていきます。
今回は比較にあたって、ポモドーロタイマーのアプリを作成いたしました。

## 仕様
– 初回起動時に25分(作業)のタイマーがセットされている
– 画面には開始ボタンと停止ボタンがある
– 以下のサイクルでタイマーが使用できる

1. スタートボタンを押すことでタイマーが開始される
1. タイマーの残りの時間が0秒になると5分(休憩)のタイマーがセットされる
1. スタートボタンを押すと休憩時間が開始される
1. タイマーの残りの時間が0秒になると25分(作業)のタイマーがセットされる
1. 項番1に戻る

– タイマー作動中に停止ボタンを押すと25分の作業時間にリセットされる

## アプリ画面
– Androidで開発した画面
【React Native】起動時にドロワーが一瞬表示されてしまう

## はじめに
React Navigation v2→v5 に一新する機会があり、
その際にAndroidでクリティカルなバグが発生したので、解決策を備忘録として残しておきます。

## 起動時にドロワーが一瞬表示される
呼んでもないのに一瞬ドロワーがひょっこりしてしまいます。

`※わかりやすいようにドロワーの色は黒にしています。`
![drawer.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699313/46ff404c-5d48-4d3e-795b-b74a14557e52.gif)

## 解決策
ドロワーの`width`値が影響している模様。
初回renderフラグを用いて、`width`を制御することで現れなくなります。

`※下記コードは一部になります。`

“`javascript:initialRender.js
import { useState } from ‘react’;

export const initialRender = () => {
const [i

元記事を表示

1. 【Android/Kotlin】Android Studioインストール

#はじめに
DreamHanksのMOONです。

今回からKotlin言語を使用してAndroidプログラミングについて見てみます。

本来AndroidはJava言語を使って開発されていましたけど、最近はKotlinを使って開発することが多くなっています。
今回はKotlinを使用してみます。

#開発ツールをインストール
 Androidを開発するためのAndroid Studioをインストールしてみます。
       https://developer.android.com/studio?hl=jp
 この公式サイトのリンクでアンドロイドスタジオインストールをします。

#Android Studioプロジェクト生成 
  インストール後、最初にアンドロイドスタジオを実行すると以下の画面が表示されます。
  一番上の「Start a new Android Studio project」を押してプロジェクトを作成します。
  ![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708649

元記事を表示

Jetpack Compose (アルファ版) ハンズオン

Jetpack Compose がアルファリリースされたので遅まきながら触ってみました。

色々と新しいワードやコーディングばかりで学習コストがかかりそうかも…?
でも Kotlin で書けるのは嬉しかったりします?

ひとまず簡単に ViewModel なんかを使いながら、リストやツールバーの表示を実装してみます。

## Environment

今回使用した環境は以下になります。

| Tools | version |
|:—————:|:————-:|
| Android Studio | 4.2 Canary 9 |
| Kotlin | 1.4.0 |
| Jetpack Compose | 1.0.0-alpha02 |

## Get Started

まずはプロジェクトを作成します。
Canary 版には `Empty Compose Activity` のテンプレートがあるので開いてみましょう。

![empty_compose_activity.pn

元記事を表示

セキュリティの尻隠して頭隠さず…?Androidに実装されている「プライベートDNS」を利用しよう

本日のお題。
**セキュリティの穴、DNSを何とかしましょう!**

自宅用DNSサーバーを構築してからDNSがマイブームな今日この頃、[プライベートDNSについての記事](https://qiita.com/Usamimi_Latias/items/8e3df25e461963a88716)に出会いました。
以前から有効にはしていましたが、どんな動作をしているのか気になって調査してみました。

# プライベートDNSとは?

`Android 9 (Pie)`以降のスマートフォンに実装されている機能で、以下のような感じでアクセスできると思います。

– `設定`→`その他の接続`→`プライベートDNS`
– `設定`→`ネットワークとインターネット`→`プライベートDNS`
– `設定`→`ネットワークとインターネット`→`詳細設定`→`プライベートDNS`

取り敢えずは`プライベートDNSを設定`を選択して`dns.google`や`one.one.one.one`などと打ち込むと設定が完了します。
ほぼ同様の内容ですが、[Google Public DNS](https://d

元記事を表示

【React Native】TextInputにselectionColorを設定するとAndroidで文字が見えなくなる

# 前提
– React Native 0.62.2

# 問題
– カーソルの色をカスタマイズしようと、TextInputにselectionColorプロパティを設定すると、Androidでは透過が起きず、文字が見えなくなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224815/c1240799-570c-f1d8-1ed4-57e087a4b0a8.png)

# 解決方法
– 以下のように半透明の色を直接指定する

“`js
selectionColor=’rgba(0, 0, 0, 0.5)’
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224815/58b4f315-3aaa-007e-8b54-cc73d159df3f.png)

# 参考文献
– https://stackoverflow.com/questions/54368090/how-to-ma

元記事を表示

Android, Kotlin: CSVの読み書き

– Minimum SDK: API 23
– Android Studio 4.0.1
– Kotlin 1.4.0
– opencsv Version: 5.2

Android, KotlinでCSVの読み書きを、opencsvを使って実装します。
CSVの操作を説明するために、StringReader, StringWriterを使って実装していますので、必要に応じてFileReader, FileWriter, InputStreamReader, OutputStreamWriterに置き換えて実装してください。

SDカードへのファイル読み書きはこちらを参照ください。→ [Android: SDカード上のファイルへの読み書き](https://qiita.com/nozaki-sankosc/items/686ac932420dcc82b063)

## 準備

### opencsvライブラリ取り込み

“`gradle:build.gradle(app)
dependencies {
implementation ‘com.opencsv:opencsv:

元記事を表示

【Android/Kotlin】同じWidgetを複数作成した際に,別々のものとして動作させる方法

#はじめに

この記事は[【Android/Kotlin】Widgetを作ってクリック時の動作を設定する
](https://qiita.com/hac-chi/items/3c4a72818b9bc69d10aa)の続きとなっていますすが,ウィジェットの基本が分かっている方はこの記事だけ見れば大丈夫です。

また,執筆者は趣味レベルのAndroidアプリ開発者である為,説明間違いが含まれている可能性があります。お気づきの点がありましたら,是非コメントお願いいたします。また,アップデートにより,機能やコードが記事執筆時点と異なる場合があります

#本記事の内容
本記事では,[【Android/Kotlin】Widgetを作ってクリック時の動作を設定する
](https://qiita.com/hac-chi/items/3c4a72818b9bc69d10aa)で作成した,ボタンを押すとカウンターが1ずつ増えていくウィジェットについて,複数が同じものとして動作してしまう問題を解消します。
![ウィジェットボタン問題.gif](https://qiita-image-store.s3.

元記事を表示

【Kotlin】AndroidでiOSライクな画面遷移アニメーションを実装する

簡単に言えばiOSで`UINavigationController`で`show`するような画面遷移を、
Androidで簡単に実装出来ます。

###手順1:res/animを作成する

![スクリーンショット 2020-09-10 11.39.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/551622/fc077c27-3830-43a7-fa1e-c1d6405c8931.png)

###手順2:画像のようにxmlファイルを4件追加する

##close_enter.xml
“`kotlin


元記事を表示

[備忘録] MacBook Pro を使って Android 10 を Raspberry Pi 4 に焼く

Linux を使える環境だったら全く問題ないんですが、 macOS を搭載した MacBook Pro で Android 10 を Raspberry Pi に焼く時にいくつかハマるポイントがあったので備忘録がてら残しておく。

macOS で、とありますが Docker や VirtualBox で Linux は使いますので Linux を使わずに Android を焼く。という縛りプレイとかではないです。 Linux系OS の起動ディスク作ったりが面倒だったのでそれをやらずに焼く方法。という感じです。

主に以下で公開されている内容に沿って進めていきます。
https://github.com/android-rpi/device_arpi_rpi4

この記事もわかりやすくまとめられています。 Linux が使える環境であればこちらを読んでその通りに進めていければいいと思います。
https://medium.com/@jpnurmi/android-10-on-raspberry-pi-4-5078901698dd

Android のソースは以下のサイトからダウンロード

元記事を表示

OTHERカテゴリの最新記事