タイトルの通りなんだけど、Android Emulatorにapkがドラッグ&ドロップでインストールできるように
なってた。PCからapkをエミュレータの画面上にドラッグするだけ
あんまり使うことないかと思ってたけど偶然必要な機会があってやってみたら超簡単に入ってびっくり。
R8でNullPointerException
課題
Android Stuio 3.5からはProguardよりもR8推奨ってことでR8を有効にした状態で リリースビルドをしようとしたらビルド中にNullPointerExceptionが発生してビルドできなかった。
対応
ググった感じだとOkHTTPを入れているとバージョンによっては発生するらしい。
R8の最新バージョン使えばいけるかな、ということで プロジェクトの build.gragleに以下を追記してみたらビルドが通った
com.android.tools:r8
は com.android.tools.build:gradle
よりも上に書かないといけないらしい(未確認)
kotlinx-metadata-jvm
はR8の依存関係で必要
buildscript { repositories { maven { url 'https://dl.bintray.com/kotlin/kotlinx/' } } dependencies { classpath 'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.0.5.1' classpath 'com.android.tools:r8:1.4.93' classpath 'com.android.tools.build:gradle:3.5.0-beta01' } }
備考
Instant Runを無効にすれば問題が発生しないという意見も見られた。未確認だがリリースビルドするときだけならそちらでも良さそう。
参考
onActivityResultの呼ばれるタイミングとFragmentについて
課題
Fragment.onCreateViewでViewを生成しているが、onActivityResult内でそのViewを使用しようとした際にエラーになるケースがある。
原因
通常Fragment.onActivityResultはActivity.onStart前に実行され、それまでにはFragment.onCreateViewは既に実行されているため問題とはならないが、 呼び出し元のActivityが破棄されていた場合、Fragment.onActivityResultが呼ばれた後でFragment.onCreateViewが実行される。 そのためViewは取得できずにFragment.onActivityResult内で使おうとするとエラーになる。
対応
onActivityResult内でViewへのアクセスを止める。Fragmentのプロパティとして状態変数を持ち、その値を変更しておく。 onCreateView実行後にその値を元に表示を切り替える。