どこが改善されているか今一わからないAndroid Studio 2.2 Beta
- 頻繁に更新されるのはいいのだけれど。。
- InstantRunについて
- Emuratorについて
- aidl周りの話
- ManifestMargerの話
- android gradle plugin 2.2.X に gradle 3.0が適応できるようになった話
頻繁に更新されるのはいいのだけれど。。
今一安定して動くようになっているのかいないのかよくわからない状態。
新しいバージョンを更新してしまった人がよく
- 本を写経していただけなのに動かなくなる〜><
みたいなTw呟きを相変わらずみるのは、破壊的修正されるからだろうな。。。
IDEで編集中に、気を抜くと最新版に勝手に書き換えられたりしますし。。
InstantRunについて
一見動いているように見えるんだけど
- 結構な確率でActivityの同梱エラーが発生する*1
- この状態だと基本rebuild*2しか無い
- フォルダ参照型のLibraryProjectがあるとその現象が顕著
- 転送先の切り替えが基本できない*3
- USBはずしてconnection情報切るとか・・
- adb kill-serverで接続情報を消すしか無い
Emuratorについて
- GoogleMap対応のイメージ(x86)、イメージ内に最初から入っているMapすらまともに表示できない
- 5/6 系のイメージ両方共ダメ
- たぶんエラーにならないのは、GooglePlay開発者サービスが自動アップデートされないから
端末内部のadbを触ってみた時のメモ
なお話が面白そうで、エミュレータでできるか触っていたんですけど、
まずandroid6だと下記のコマンドが廃止されているので、それで遊べないっぽい
Compile, for android 6.0, adb for "device-on-target" - Stack Overflow
/system/bin/adb
あとは
android5 までは内部で持っているadbで、adb start-server のportバインドに失敗すると。
実機自体でも、
TCPモードにしない場合は adb start-server のportバインド
は失敗するので、TCPモードで開放されるportがあるんだろうな
これは常識なのかもしれないけど
PCから adb connect で先に繋いじゃうと
実機内部のadbでは接続できないようですし・・*4
aidl周りの話
テクブ本の赤本参考に触ってみたんだけど、ADTの頃よりデグレってる
技術書典(2016/06/25) B-07,08 | TechBooster
- javaとaidlが同じフォルダに入っているとビルド自体不可(エラーになる)
- 一昔前のgradle groovy plugin の javaとgroovyのmix compile ができなかった状況と同じ
順番的に
- dependency jar
- aidl
- java
の順番でコンパイルされるようなので、
- カスタムクラスはaidl側に書かないと使えない
- InstantRun有効だと、よくaidlのコンパイルにシクって、本体側で参照しているコードが赤くなる
- この状態だと再実行で再ビルドは知らせるしか無い
- それで解決しない場合はrebuild
一発でイケば 5−10秒くらいなんだけど、実際は動かすのに実行ボタンを2−3回押すことが多くて
結局30秒ぐらいかかっていてInstantRunチェック無くても変わらなくね?
とか思ってしまうのは気のせいなのだろうか・・(汗
ManifestMargerの話
minsdkの回避のために下記な書き方の回避法が出ていましたが
android.applicationVariants.all{ variant -> variant.outputs.each { output -> output.processResources.manifestFile = file('src/main/AndroidManifest.xml') output.processManifest.enabled=false } }
InstantRun でエラーで動かなくなること無くなったよなーとか思ってたら
DSLの方で minsdkとか指定されている場合、この設定見ていないっぽい。
特にカスタムLibraryProjectで指定されている場合は、ビルドができないと。
結局、低いminsdkをDSL上で指定して
@SuppressWarnings("deprecation") @SuppressLint("NewApi")
を頑張らないといけないわけだ。*5
特にandroid wearとかは、
- カスタムLibraryProjectとして導入される
- 4.4以降からwearボタンが表示されて動かせるみたいな奴
みたいなのが凄く作りづらくなってるかなーと。
android gradle plugin 2.2.X に gradle 3.0が適応できるようになった話
gradle:2.2.0-beta1 辺りからの対応らしい。
75%速くなったという gradle3.0に指定を変更してみたけど
- InstantRunを使う限り、
- フルビルド/rebuildのみ1−2割程度改善という感じ
- 結局はgradleというより呼びだされているjavaタスクのほうが時間かかってる
という結果でした。
おっ、Gradle 3.0でAndroidのビルドしてみたらエラー出たな(^v^)
— なかざん (@Nkzn) 2016年8月18日
っていうか、基本1回でInstantRunのビルド通ったこと無い気がする。。
InstatRunの挙動的な話
よく転送エラーが出る
- rebuildして転送し直せ言われる
jrebelと違い、端末内のアプリはそのまま起動はできる
- ただし、次回ASから転送時はcleanから始まるフルビルドになる
- これデバックセッションが切れたから、フルビルドの流れなんだろうな と
- ただし、次回ASから転送時はcleanから始まるフルビルドになる
InstantRunのフルビルド
- メインプロジェクトのみフルビルドしているよう
- カスタムLibraryProjectはcleanビルドしないことにより高速化しているよう