破壊的改修が加速している Android Studio 3.0 Beta2
はじめに
Android Studio Release Updates: Android Studio 3.0 Beta 2 is now available
Java8のbuildエラーを直した しか書いてないんだけど、また裏でゴッソリ変わってるっぽい
正直な所 Beta1よりひどくなったかな・・・
いつの間にかAS3.0系でのラムダ式内のstacktraceがちゃんとファイル名・行数出力にサポートしてて「いいぞ、いい子だ」という感じだ
— 川峠@Andriders (@eaglesakura) 2017年8月14日
な感じで、実際は 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フルビルドなバグ っぽい挙動は治ってるみたいですね。
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月14日
lombokがエラーになるな、、
databindingも不安定だし使わない方が楽かも。kotlinだと代替あるし、、https://t.co/a1CU6VAZ2K
あぁ^~~~~
— じぇーん = Jane (@kinijane) 2017年8月12日
apply plugin: 'kotlin-android-extensions'
ってbuild.gradleに書いたら。メチャクチャViewの扱いが楽になるんじゃぁぁぁ^~~~~(狂)
せっかく設定した下記の環境がおじゃん・・
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
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月14日
公式エミュ終了させるとIDEも落ちるのは環境依存なのかな?
(結構ストレス溜まる
AS3.0だと必ずなのですが、、、
(AS2.3ではおきず
この頃、wearのNotification連携テストでemuを立ち上げているわけですが、放置しているとたまに固まるんですよね。。*3
- Emu終了させる
- ASのIDEもスッと自然消滅気味に終了される
- ASの起動し直し、OpenProject(5-10分放置状態)
あたりになるので、生産性が凄い悪い。
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月14日
project二個開いてるとき、close projectで閉じれない
buildConfigFieldの変更がgradlew --stop しないと認識しない
(gradle runtime 4.1のせい?
今回から起きてる状態。Projectは複数開けるけど閉じれない状態*4。
これもなIDEバグだよな・・。他の方が指摘してないようなんだけど自分の環境だけか??
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月14日
gradle plugin 2.3使う場合、
open projectのタイミングでしか補完indexを正常に作らなくなったんだけど
(またはinvalidated restart
3.0用に差分補完index作成に変わったの?
- OpenProject
- 補完index作成に5分程度かかる
- Gradle Syncボタン押下
- 比較的速く終わる*5
- buildエラー
- 補完情報が消えて(消されて?)真っ赤になる
- Gradle Syncボタン押下
- 真っ赤な表示が消えない
- Invalidate Restart が必要
- またOpenProjectが終わるまで10分は待たされるのですごいストレス
ただ思ったのが、今回JDK8に関連する修正がゴソっと入っているみたいなので、
JDK7=>JDK8 にすると安定するかもしれない。ココは追加検証してみよう
=> 安定しませんでした><。更によくわかんないエラーが
まあJDK8対応と言っても、LLVMでdex変換エミュレートしてるだけだしね。*6
因みに自分は、これも導入トライしたことあるけど 依存のretrolamdaでファイル参照エラーになって諦めました・・・
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月14日
logcat定期的に表示されなくなる
(usb差し直し必要
library project変更認識に
gradlew clean cleanBuildCache必要
(これapi指定が無い物implimatation扱い?
今日AS更新していて凄く悩んだ所1
これに関しては、正直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エラー
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月15日
android.enableD8=true 試してみたけど、対して変わらないような。
あとbuildが通るプロジェクト条件がかなり厳しいかも
kotlin projectなら通るのかな?
それでしかテストしてなさそうだし
これWizで作りたてぐらいのならコンパイル通るんですが、ちょっと複雑なのはNG。
まあJackの初期と同じぐらいの認識でいいのかもしれない
Feblic
— close_yutori (@kimukou2628) 2017年8月15日
今日いきなり、crashlytic使ってるプロジェクトがbuild出来なくなって辛い。
crashlysticStoreDeobsDebug
でエラー出てて
対応するgradle runtimeが違う時とかにでるらしいんだけど
1.+ で参照って公式指示なんすが
Feblic
— close_yutori (@kimukou2628) 2017年8月15日
plugin内部でエラーでてるのは分かったけど
対応してる gradle plugin,gradle runtime のバージョン書いて欲しいな、、
(もしかして3.0 plugin対応して、2.3系動かなくしたなら目も当てられない気がする。
同じプロジェクトを 3.0 plugin-beta2 版に app/build.gradle を差し替えてみると
コンパイル自体は通る。うーん。AS2.3まだつかっている人いると思うんですが
両対応できなかったんですかね?
=> 3日後に実行したら通りました。pluginの 1.+ 指定怖いw
gfxさんが下記のpluginで両対応していたコミット見たんだけど・・
android
— close_yutori (@kimukou2628) 2017年8月22日
Firebase Adsぶっ込んだら、
READ_PHONE_STATEとSD権限が付与されてるの
up時にPlay先生が警告して大わらわ。
因みにAS2.3.3だと、どのモジュールで権限追加と色分けされるんだけど
AS3.0だとされないのは証拠隠滅なのか?
複数のマニフェスト ファイルの統合 | Android Studio
統合されたマニフェストを調査して競合を特定する の 色付き機能が AS3.0で動かなくなっている
という話。便利なんですけどね。自分で作って自慢している機能動かなくしてどうするんでしょうか・・・
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月22日
jarを差し替えた場合、
左上のSyncronizeでファイル情報更新しつつ
Clean Projectしないと gradle sync対象にならないみたい。
これローカルファイルの変更監視止めたっていうことなのかも
ようはこれ
- AS上で書き換えたものは認識する
- Finder経由でSublime等で変更したという情報をリアルタイムに認識しない
- IDEAだと認識してくれるんで、負荷対策の為に監視やめたのかなー
- しかもローカルのファイルではなく Cacheフォルダにファイルをクローンしてそちらを使ってる疑惑が。。
という話
Android Studio 3.0 Beta2 にしたら sync failed になって Build > Clean Project でも直らなかったので build.gradle で compile を implementation に直して gradlew cleanした
— Yuki Anzai (@yanzm) 2017年8月22日
がやたらRTされてたけど、別にimplementation に書き換えたからというわけではないし
gradleファイルをAS上でかきかえてsyncし直せば同じ状況になると思うんだけどな・・うーん。
追記状況(2017/08/23)
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月23日
projectViewのprojectで
Cmd+Shift+AでEx入力してExclude指定してIDEAのindex対象から除外機能使う
という知見が依然流れてたけど
OpenProject時に全初期化されるので意味ない
zaki先生が言及してRTされまくってたやつ。
- IDEAだとフルにワークスペース情報とか頻繁に作り直さない
- 3.0-beta以降だと OpenProjectでフルindex、それ以後はGradleSyncボタンは差分index
- 2.3.3は常にGradleSyncボタンもフルindex
気づきにくいんだけどね。。。(苦笑
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月23日
やっぱり、
InstantRun と android.enableD8=true
の共用はbuildが凄く不安定になるみたい。
InstantRun使わなければ問題なし
今さわってるの1プロジェクト構成で一番シンプルな筈
これ広告ライブラリのreciverとかでよく起こるエラーなんだけど、その場合回避方法無いよね(汗 / “AdvertisingIdClient#getAdvertisingIdInfoがnullを返すのでアプリが…” https://t.co/epBLwA4qHY #Google
— close_yutori (@kimukou2628) 2017年8月23日
android studio 3.0 Beta2
— close_yutori (@kimukou2628) 2017年8月23日
うーん。instantRun使わなくしたら、ヌルポエラー出なくなった、、、
instantRunって使えるケースが凄く狭い気がする、、https://t.co/BP0jbvZl57
うーん。InstantRun高速化はいいんだけど安定して動かねー。
TLではここらへんみないので、皆さんの環境は安定してるのかなー。
kotlinで書けば問題ない系?
時々はまるので肝に銘じたいが、Android Studioでdagger2とかdatabindingとかが原因っぽい、ビルド時にクラス見つからない系エラーが大量発生したらMessagesタブではなく、Gradle Consoleタブを開け!
— HOMMA Teppei (@loadlimits) 2017年8月23日
Exceptionが出力されてるぞ!
でもkotlinでかかれている著名開発者の方もAPT使う場合はやっぱ不具合有るみたい
でもまあ、data-binding等の利用も勿論減らせるけどね。。。*10
TLメモ
android studio beta2 にアップデートしたらいろいろ大変なことになった
— shogo (@sho5nn) 2017年8月13日
https://t.co/4IUCkQvng8:gradle:3.0.0-beta2
— shogo (@sho5nn) 2017年8月13日
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-rc-1-all.zip
なぜかヌルポでビルド失敗する
AS 3.0 Beta2にアップデートしたらgradle syncで常にNPEでIDEが落ちるようになったことをここに記す
— 川峠@Andriders (@eaglesakura) 2017年8月13日
ビルドキャッシュ仕様が変わったらしく、一旦キャッシュを全cleanしてからsyncすると一応はNPEを回避できるようだった
— 川峠@Andriders (@eaglesakura) 2017年8月13日
AS 3.0 B2でレイアウトエディタが正常起動しない問題
— 川峠@Andriders (@eaglesakura) 2017年8月24日
何度めかのアレでようやく起動
— 川峠@Andriders (@eaglesakura) 2017年8月24日
Project Buildではダメで、一度インストールまでやるとちゃんと「レイアウトファイルのビルド済」という扱いを受けた
— 川峠@Andriders (@eaglesakura) 2017年8月24日
あ!あれバグってたんですか!
— Fumihiko Shiroyama (@fushiroyama) 2017年8月22日
たしかandroid studio 2.1ぐらいで使えなくなってstack overflowあたりで、それバグや!みたいな話あるのを見て諦めてプレゼンテーションモードとか使って代用していたのですが、さっき3.0 beta2でふとやってみたらピンチアウト出来て嬉しかったです^^
— AAkira (@_a_akira) 2017年8月22日
@_a_akira @magie_pooh 貴重な情報ありがとうございます!普段は使わないんだけどLT中に拡大しようと思ったらピンチ効かなくてあえええASなんで?!ってなってました。あるバージョンからのバグとは思わなかった!
TLメモ(minsdk21指定は要らない?)
そのhackもう不要になったと聞いたけどどういう理由からですか?
— zaki50 (@zaki50) 2017年8月22日
それI/Oの発表中にも「これは実際には普通にASで開発してると自動的に有効になってる」ってスピーカーしゃべってるはずですよ
— Fumihiko Shiroyama (@fushiroyama) 2017年8月22日
検証状況
うーん。これなんですけど、自分が検証してる感じだと下記な感じ*11
うーん。minsdk 21でdebug時に速くなるって話は、
— close_yutori (@kimukou2628) 2017年8月22日
instant run & multiDex有効にしてる時だけの話で、minsdk 小さかったりすると、hotswapモードでは動かせないみたいなログ出てるんだけどな。
instantRunかは環境変数で確認可能ですし
自分が触っているプロジェクトに関しては、特に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だと動いているか怪しい?
*7:結構頻繁
*8:Beta1までは問題なかったのに何直したんでしょう??
*9:gradlew –stopして起動し直しすれば、動くので誤差の範囲かも
*10:findViewByIdの代替としての利用を
*11:G様信者が多いw 何故そんなに盲信できるw
*12:G様推奨は 全部gradleファイル上に書く。Manifestにはminsdk記載を書かない