今からでもダウングレードしたい Android Studio 2.3 Beta 2
はじめに
Gradle 3.3 は本当に100倍以上の速さになったのか
なエントリが書かれるAS 2.3 Beta2 ですが
自分の体感的には、正直アップデート失敗しました。Beta1に戻したい状態
環境
MacOSX 16G
AS 2.3 Beta2
状況
つらくなった挙動
- どうも定期的にマウスやキーボードが動かなくなる
- バックグラウンドで何か遣っている挙動
- Syncや補完Index作成?補完候補作成?
- USBとかで実機繋いでるとポーリングしているようで、その瞬間重くなる
- 重くなった瞬間、USB抜くと応答ができるようになる
- ビルド中に重くなる
- gradlew damemonとsyncしているよう
アクティビティモニターをみていると、瞬間的にASのCPU使用量がグンと跳ね上がる感じ
Android Studioがまた沈黙。今日3回目。ぐぬぬ…
— をかのゆ (@okanoyou) 2017年1月11日
とつぶやいてるのって同じ状況じゃないかな・・?
Beta1 までは問題なかったので、正直なに変更したか知りたい。
release note見ても全然更新状況がわからん><
2017/1/16 状況追記
- Beta2になって
- メモリが食うようになった
- IDEの突然死が復活した
というTwのつぶやきを見たので、メモリ使用量を見てみたら
1.5〜2倍くらいになってる・・。
完全にメモリSwapによるCPU負荷高ですね・・
これ gradle 3.3完全対応? のせいなのか、android gradle plugin 2.3-Beta2のせいなのかわからないんですけど、*1
とりあえずいつもの gradle.properties でのメモリ、forkスレッド数制限 でなんとかなりました
org.gradle.jvmargs=-Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+HeapDumpOnOutOfMemoryError - Dfile.encoding=UTF-8 org.gradle.workers.max=4 org.gradle.parallel=true org.gradle.daemon=true org.gradle.configureondemand=true
で、dex処理だけは2G指定しないとビルド処理が止まることが有るので、下記のおまじないは必要と・・
- app/build.gradle
android { dexOptions { javaMaxHeapSize "2g"//data-bindingつかってるなら 3g-4g ? } }
16G Macで厳しいって・・
G様の開発スタッフは32G以上のMacで開発されているんだろうか・・・
この間、Celeron/4GRAM/HDDな安物ノートPCでAndroid Studio含む開発環境のアップデートした時は三時間かかったものだが、今日VAIO pro 11で同じ事やったら15分で済んだので、やはり速さは人権。
— Jiro@Jota+開発 (@jiro_aqua) 2017年1月19日
無理無理なPCやネット(モバイルからのテザリングしかないとか)の環境でAndroid SDKやAndroid Studioをインストールしようとして、当然のごとくとてつもない時間がかかって、それを全部Googleのせいにする人が目立つんだよね
— けいちゃ (@keicha_hrs) 2017年1月19日
な話は分かるんですけどね。。
- Unityがまともに動かないから=>開発環境をアップデートする
みたいなのは部署的に予算は取りやすいらしいんですけど、
ASがアップデートしたからはあんまり理由にならないみたい。。
-Xms1024m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m
編集中にマウスが瞬間的に固まる件
ググってみたら、usbマウス等が使えなくなってる人がやはり居るみたいで
android file transfer が常駐している時と同じ現象のよう*3
とりあえずbluetoothマウスでしのぐしかないかな~(^^;)
build.gradleを編集していると頻繁に固まる
- 補完候補をリアルタイムに探しているような状況
- その度に編集カーソルがピクピク固まる
- これまともに動く環境ってどれだけ高スペックなんだろうか?
因みに、
- やたらとbuild.gradleが自動フォーマッターをかけようとするので
- 手動でいじっている人はbuild.gradleが頻繁に壊れます
- この状況で flavorとか追加させようとするのは正直やめて欲しい><
- しかも標準のbuildTypeの切り替えだけで動かない仕様は糞
ビルド自体
gradle runtime が 3.3正式対応したので高速化した? との話が・・
でも実は Beta1 でも 3.3 普通に動かせていたので、たぶん関係ないんだよね・・
逆に毎回「gradle runtimeが 3.3になってないぞオラーw」
と余計な警告が出るようになったのでウザい感じも。。。
Library参照変更時に、直前の設定のバイナリを強く引きずる
gradleでLibraryのバージョン等を変更してビルドするとduplicate entryが多発。
- gradle sync
- cleanビルド
が必須になった挙動*4
2番だけやっても効かない
Build Cache が悪さをしているのか/効いているのかまではわからず*5
なんかどんどん劣化している気がするのは気のせいなのかどうか・・
特にこういう使い方には向かない
ASを複数枚開いて
- Aのプロジェクトを参照しながら
- Bのプロジェクトを作成
みたいなことをしようとする場合、
ので厳しい状況になる*7
なんでASで複数プロジェクト開くの?
IDEAの機能に
- Aのプロジェクトのファイル(パス)をコピーして
- Bのプロジェクトに貼り付け
- BのプロジェクトにAのファイルがコピーされる
という仕組みがあり、これ便利だから
でもまあこれ、多分IDEAの機能のままの実装で
- AS独自だと
- resをまとめて表示する機能があり
- hdpi/ldpi/xhdpi とか
- だがしかしこれをまとめてコピーができないのであんまり使い勝手よくない><
- resをまとめて表示する機能があり
どうせやるならココまで拡張して欲しい。
android 4.3以上からしか使えない
PNG <=>WebP 変換メニューとか要らんからさ・・
AS 2.3になって不便になっている所
ビルド時のlintがつらたん
これ初期の andoid gradle plugin 2.3.X からだけど
- app/AndroidManifest.xml
<uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> <uses-sdk tools:overrideLibrary="hoge.fuga.wearapp"/> <uses-sdk android:targetSdkVersion="24" android:minSdkVersion="9"/>
とかけていたのがNG*8
- app/AndroidManifest.xml
<uses-sdk android:targetSdkVersion="24" android:minSdkVersion="9" tools:overrideLibrary="hoge.fuga.wearapp,android.support.v17.leanback" />
でも tools:overrideLibraryの指定は255文字までなので、それ越えるとエラーになる
だから嫌でも minsdkがどんどん上げざるを得ない状況になる
- app/AndroidManifest.xml
<uses-sdk tools:node="replace" />
で tools:overrideLibrary のかわりもいける みたいな記事も読んだこと有るんだけど
現在こっちは動かないみたいなんだよね。。(汗 *9
build-toolsの最新化を強いられる
前は低いバージョンでビルドをできていたのに、
「build tools 25.0.2を指定しろ」みたいに強いられる
まあココらへんASの指示に従って上げてしまい、
ビルドができなくなって崩壊するみたいな状況もあったりも・・
proguardのlintエラーの表示がわかりづらくなった
標準でも proguardの実行ログが大量に出るのですごくわかりづらい><
Terminal窓で
gradlew assembleRelease > log
として Sysout上に出てくる記載を拾ったり
gradlew assembleRelease -info
として拾うパターンもあり
逆に debugビルドで Built-in Shrinker を有効化してチェックするのも良*10
- Built-in Shrinker は
- debugBuildにproguardをかけてサイズを小さくする
のでproguardに繰り返し格闘する場合はこちらのほうが時間の節約かも
- app/build.gradle
debug { debuggable true minifyEnabled true //★ useProguard false //★ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // ← 追加 }
*1:少なくとも 2.3-Beta-1 は問題なかった・・
*2:まあこの指定でも合算で2Gは食うんだよね。最近のデフォルト設定だと何も指定無しで5〜6G近く食う時有るから、それは重いわ・・
*3:頻繁になった usbボーリングチェック が入力デバイスを邪魔する?
*4:InstantRunを無効にしてもダメ
*5:cleanビルドしている時点で ビルド高速化?な観点は正直疑問では有りますが・・
*6:gradle daemonからIDEにシグナルを送っている挙動
*7:Beta1までは問題なかったが、Beta2では2倍重くなる感じ・・・
*8: “UsesMinSdkAttributes” lintがfatal error指定にされているからが理由らしいですが・・
*9:2014年ごろの記事みたいですし。G様の過去互換ステっぷりは激しいですし・・