どこが改善されているか今一わからないAndroid Studio 2.2 Beta


頻繁に更新されるのはいいのだけれど。。

今一安定して動くようになっているのかいないのかよくわからない状態。

新しいバージョンを更新してしまった人がよく

  • 本を写経していただけなのに動かなくなる〜><

みたいな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 ができなかった状況と同じ

順番的に

  1. dependency jar
  2. aidl
  3. 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タスクのほうが時間かかってる

という結果でした。

っていうか、基本1回でInstantRunのビルド通ったこと無い気がする。。

InstatRunの挙動的な話

  • よく転送エラーが出る

    • rebuildして転送し直せ言われる
  • jrebelと違い、端末内のアプリはそのまま起動はできる

    • ただし、次回ASから転送時はcleanから始まるフルビルドになる
      • これデバックセッションが切れたから、フルビルドの流れなんだろうな と
  • InstantRunのフルビルド

    • メインプロジェクトのみフルビルドしているよう
    • カスタムLibraryProjectはcleanビルドしないことにより高速化しているよう

*1:not found Activityとか。。

*2:cleanビルドからやり直し

*3:send same devices のチェックつけていなくても

*4:Multi portバインドは許可されないのでしょう。多分。。

*5:Lintでbuildエラーになるわけなんだけど、offに出来る設定が、アノテーションの指定を頑張る/sdkの指定を変更 等以外に今一わからない今日この頃