破壊的改修が加速している Android Studio 3.0 Beta2

はじめに

Android Studio Release Updates: Android Studio 3.0 Beta 2 is now available

Java8のbuildエラーを直した しか書いてないんだけど、また裏でゴッソリ変わってるっぽい

正直な所 Beta1よりひどくなったかな・・・

な感じで、実際は Java8の補完index周りが強化された感じのよう

動作環境

  • macOS Sierra
  • 16G
  • HDDタイプのiMac
  • AS 3.0-Beta2
  • gradle plugin 2.3.3 or gradle plugin 3.0-beta2
  • gradle runtime-4.1-bin

状況(plugin 2.3.3)

一応 Beta1の debug実行時に、BuildTypeフルビルドなバグ っぽい挙動は治ってるみたいですね。

せっかく設定した下記の環境がおじゃん・・

exception-think.hatenablog.com

  • 正直な所、buildは通る
  • ASの起動時に、無効なpluginです と言われてlombok pluginが無効化される
    • Setting>build>Annotation Processerのタブ設定ページを作る //★
  • ビルドは通るが、IDE側で真っ赤になってる*1

★が不正だといわれて無効化される*2

追記検証

provided => annotationProcessser に変更したら動くかどうかあとで検証して見る予定

=> エラーになりました><。認識できません

因みに、gradle plugn 3.0-beta2 だと,下記指定はDSLエラーになる。訳わかんねー

  • provided =>compileOnly

lombok が対応していないのかなー

https://developer.android.com/studio/build/gradle-plugin-3-0-0.html


この頃、wearのNotification連携テストでemuを立ち上げているわけですが、放置しているとたまに固まるんですよね。。*3

  • Emu終了させる
    • ASのIDEスッと自然消滅気味に終了される
  • ASの起動し直し、OpenProject(5-10分放置状態)

あたりになるので、生産性が凄い悪い。

今回から起きてる状態。Projectは複数開けるけど閉じれない状態*4

これもなIDEバグだよな・・。他の方が指摘してないようなんだけど自分の環境だけか??

  1. OpenProject
    1. 補完index作成に5分程度かかる
  2. Gradle Syncボタン押下
    1. 比較的速く終わる*5
  3. buildエラー
    1. 補完情報が消えて(消されて?)真っ赤になる
  4. Gradle Syncボタン押下
    • 真っ赤な表示が消えない
  5. Invalidate Restart が必要
  6. またOpenProjectが終わるまで10分は待たされるのですごいストレス

ただ思ったのが、今回JDK8に関連する修正がゴソっと入っているみたいなので、

JDK7=>JDK8 にすると安定するかもしれない。ココは追加検証してみよう

=> 安定しませんでした><。更によくわかんないエラーが

まあJDK8対応と言っても、LLVMでdex変換エミュレートしてるだけだしね。*6

因みに自分は、これも導入トライしたことあるけど 依存のretrolamdaでファイル参照エラーになって諦めました・・・

github.com


今日AS更新していて凄く悩んだ所1

  • debug実行時のデバイスターゲット/プロジェクトターゲット が切り替わらない
    • 1個だと問題ないんだけど、Emuも含めて複数とかだと完全に駄目
  • logcatが突然でなくなる*7

これに関しては、正直IDEのバグだと思うんだけどどうなんでしょうね〜*8

今日AS更新していて凄く悩んだ所2

  • library projectをいくら変更しても、変更状態が取り込まれない
  • デバッカーで追うと変更前の状態がdecompileされる

という状況で、変更を中々取り込んでくれないんだよな・・・

強キャッシュすぎる・・・。半日ほど潰しました。

具体的な対処(NG)

gradlew clean

or clean project/rebuild project

具体的な対処(OK)

gradlew clean cleanBuildCache

+ Invalidate Restart

で、これを毎回遣ると10分は操作できなくなると・・。勘弁して欲しい。

今の AS3.0Beta2 って1Projectで全てどうにかしろって言う状態なのかな(汗

今更ながら思い出したのが・・

AS 3.0 Canary6 の頃のメモで、不安定化のバグ対応で

  • gradle.proptiles
org.gradle.configureondemand=false
org.gradle.caching=false

あたりしていたのを、Canary7以降で直ったと書いてあったので戻したんだよね。。

ココらへんのオプションをまたfalseにしてみたら安定するかも。要検証

検証状況追記

上記のオプションのOFFは一応効果はあったけど、微安定化ぐらいかなと。*9

どちらかと言うと

  • gradle.proptiles
android.enableBuildCache=false

の方が効果がある。速度は明らかに劣化するけど。

3.0のpluginってたまに上記の設定無視するけど、3.0-beta2では一応ちゃんと参照しているよう


状況(plugin 3.0-Beta2)

状況は以前変わらず。このまま正式版でちゃうのかなー(汗

現状把握しているのは

  • G様ライブラリ以外のUIライブラリを使うとaapt2エラー

これWizで作りたてぐらいのならコンパイル通るんですが、ちょっと複雑なのはNG。

まあJackの初期と同じぐらいの認識でいいのかもしれない

同じプロジェクトを 3.0 plugin-beta2 版に app/build.gradle を差し替えてみると

コンパイル自体は通る。うーん。AS2.3まだつかっている人いると思うんですが

両対応できなかったんですかね?

=> 3日後に実行したら通りました。pluginの 1.+ 指定怖いw

gfxさんが下記のpluginで両対応していたコミット見たんだけど・・

複数のマニフェスト ファイルの統合 | Android Studio

統合されたマニフェストを調査して競合を特定する の 色付き機能が AS3.0で動かなくなっている

という話。便利なんですけどね。自分で作って自慢している機能動かなくしてどうするんでしょうか・・・

ようはこれ

  • AS上で書き換えたものは認識する
  • Finder経由でSublime等で変更したという情報をリアルタイムに認識しない
    • IDEAだと認識してくれるんで、負荷対策の為に監視やめたのかなー
    • しかもローカルのファイルではなく Cacheフォルダにファイルをクローンしてそちらを使ってる疑惑が。。

という話

がやたらRTされてたけど、別にimplementation に書き換えたからというわけではないし

gradleファイルをAS上でかきかえてsyncし直せば同じ状況になると思うんだけどな・・うーん。

追記状況(2017/08/23)

zaki先生が言及してRTされまくってたやつ。

  • IDEAだとフルにワークスペース情報とか頻繁に作り直さない
  • 3.0-beta以降だと OpenProjectでフルindex、それ以後はGradleSyncボタンは差分index
  • 2.3.3は常にGradleSyncボタンもフルindex

気づきにくいんだけどね。。。(苦笑

うーん。InstantRun高速化はいいんだけど安定して動かねー。

TLではここらへんみないので、皆さんの環境は安定してるのかなー。

kotlinで書けば問題ない系?

でもkotlinでかかれている著名開発者の方もAPT使う場合はやっぱ不具合有るみたい

でもまあ、data-binding等の利用も勿論減らせるけどね。。。*10


TLメモ



TLメモ(minsdk21指定は要らない?)

検証状況

うーん。これなんですけど、自分が検証してる感じだと下記な感じ*11

自分が触っているプロジェクトに関しては、特にminsdkが自動で書き換わるという挙動話は無し

apk analizerで出来たapkみれば一発でわかるはずなんですが・・

まあ自分の場合、プロジェクトによってはAndroidManifest.xmlの定義をgradle上に読み込んだりとかしてるから

それでG様が想定している自動処理が動かないとかいう話はあるかもしれない*12

  • app/build.gradle
import com.android.builder.core.DefaultManifestParser 
android { 
    defaultConfig { 
        def manifestParser = new DefaultManifestParser(android.sourceSets.main.manifest.srcFile) 
        applicationId = manifestParser.getPackage() 
        versionName = manifestParser.getVersionName() 
        versionCode manifestParser.getVersionCode() 
        minSdkVersion manifestParser.getMinSdkVersion() 
        targetSdkVersion manifestParser.getTargetSdkVersion() 
    }
}

多分想定しているのは Manifest.xmlには書かず

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    //マニュフェストエントリ
    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 23

       multiDexEnabled = true
       multiDexKeepProguard file('multi-dex-keep.txt') 
    }

とベタに書いている状況想定っぽいんだよな・・。

minSdkVersionを外部変数化した場合もTL想定通りには動かず。

自動認識できるといわれているapkって

  • ベタで書いた時 =>InstantRun実行時に生成されるapkがminsdk/maxsdk等の記述が無いdebug.apkができる
    • これが自動認識するといわれてるapk?っぽい

まあ新規Wizから作ったプロジェクトの場合は上記になるはずなので、想定通りの動きなのかなーと

一応この時と状況が違うのは

  • gradle.propties
#android.enableBuildCache=false #デフォルトはtrue
#_JavaVersion=VERSION_1_7
_JavaVersion=VERSION_1_8

でもビルドは通るようになっているけど。

*1:関数が見当たらない的な

*2:従来のbuildのページに戻される

*3:多分最近HAXMの最新版更新した辺りから

*4:Windowの残像が残る?状態

*5:ここがgradle plugin 2.3.3/JDK7だと動いているか怪しい?

*6:コンパイルは通るけどクラッシュ

*7:結構頻繁

*8:Beta1までは問題なかったのに何直したんでしょう??

*9:gradlew –stopして起動し直しすれば、動くので誤差の範囲かも

*10:findViewByIdの代替としての利用を

*11:G様信者が多いw 何故そんなに盲信できるw

*12:G様推奨は 全部gradleファイル上に書く。Manifestにはminsdk記載を書かない