ようこそ Android Studio 3.0 Canary5 のトラップ教室へ
はじめに
- 補完index関係がバグる
- local.aarあたりが認識しない
- 複数人で開発してるとlocal Repoアップロード運用とかありえないかなと
- 開発している仕事場にNWアクセスフリーな独自Repo立ち上げるのって結構面倒だったりする*1
あたりのバギーな状況だったのでcanary4にに戻しました。
一応備忘メモ
release note
- gradle runtime 4.1-m1 対応
- flavor DSLを変更
動作環境
- macOS Sierra
- 16G
- HDDタイプのiMac
- AS 3.0-Canary5
- => 不具合でCanary4に戻す
- gradle plugin 2.3.3
- gradle runtime-4.1-m1
- daemonが複数立ち上がるので4.0-binに戻す
状況
これ、gradle runtime-4.1-m1 の不具合っぽい。android studio 3.0 rc5
— close_yutori (@kimukou2628) 2017年7月3日
gradle plugin自体が
org.gradle.configureondemand=false
で機能offらないと動かないとか言う以前に
build不安定ですね。
CLIからは通るけど、IDE経由buildが高確率失敗
org.gradle.configureondemand=false
にしないとdaemonがぽこぽこ量産 => Gradle Syncが失敗
IDE <=> Daemon 一対一であることを期待されているから
android studio 3.0 canary5
— close_yutori (@kimukou2628) 2017年7月4日
index作成中に頻繁に固まるのまた再現。
下記のlocal.aarのエラー含め使えないので
Canary4に戻した(GradleSyncがエラーになる為https://t.co/YKU4OvQ1Jm
Android Studio 3.0 Canary5にアプデすると、外部aarファイルの読み込みがAssertionErrorになって失敗するバグが発生中。CLIでのgradle実行は問題ないのでAS固有の問題っぽい… https://t.co/QBxV8AsfIO
— 山田航空 (@yamacraft) 2017年7月4日
ライブラリプロジェクト周りがほぼ全滅
graldew assembeDebug
はとおるのですよ・・ IDE側でindex作るコード書いているからなんでしょうかね??
すごい挙動が謎・・・
local.aarで固めるパターン
repository { flatDir { dirs "libs_aar" } } dependencies { compile(name: 'nend-sdk-3.2.2', ext: 'aar') }
プロジェクトにaarをインポートするパターン
- app/build.gradle
dependencies {
project(":nend-sdk")
}
- libP/build.gradle
configurations.maybeCreate("default") artifacts.add("default", file('nend-sdk-3.2.2.aar'))
settings.gradle でフォルダ参照するパターン
- app/build.gradle
dependencies {
project(":nend-sdk")
}
例外っぽいやつ(対象外)
//apply plugin: 'com.android.application' とは別枠なので影響が出ないよう apply plugin: 'com.android.instantapp' //元々独自っぽい wearApp project(':Wearable')
関連
Android gradle pluginのalpha4 -> alpha5のアップデートでライブラリプロジェクトのRクラスが正常に出力されない不具合が入ったらしい。
— 川峠@Andriders (@eaglesakura) 2017年7月5日
support-libraryのToolbarとかも死ぬので、バージョンを戻して対応しよう。
既存挙動(local.aar周り)
android studio 2.3.3
— close_yutori (@kimukou2628) 2017年6月28日
gradle pluginで作ったlocal.aar
libsのjarがそのままパッケ同梱
これを本体側でバージョン違いのlibraryに差し替えたいとき
exclude指定で除外出来ない
(-ω-)。詰んでるorz
android gradle 2.3.3
— close_yutori (@kimukou2628) 2017年6月29日
昨日のlocal.aarのlibs/jar のexcludeの件
下記と同じ対処ならいけそうなんだけど
これは3.0の仕様が2.3.3にもバックポートされてるということなのかな?https://t.co/Vn8u0qAMef
NGパターン
★が何故かエラーになる
- app/build.gradle
dependencies { compile (project(':libP')){ exclude group: 'com.android.support' exclude group: 'com.google.android.gms' exclude group: 'hoge.fuga.maiu' //★libP.aarパッケ時にlibs/XXX.jarで入っている } }
- libP/build.gradle
configurations.maybeCreate("default") artifacts.add("default", file('libP.aar'))
OKパターン?
というか、これは既存のルートの処理が残っていて動いている挙動に見える
repository { flatDir { dirs "libs_aar" } } dependencies{ compile (name: 'libP', ext: 'aar'){ exclude group: 'com.android.support' exclude group: 'com.google.android.gms' exclude group: 'hoge.fuga.maiu' //★libP.aarパッケ時にlibs/XXX.jarで入っている } compile group: 'hoge.fuga.maiu' //△最新のバージョンを再参照 }
単に△の最新バージョンの再設定がない場合は、下記の書き方も有り*2
ファイル除外周りの話
- excludeはclassは除外できるけど
- XXX.proptiesとかは無理
- 特に重複している場合 packageOptionで頑張るのですが・・・。
android { // 省略 packagingOptions { pickFirst 'XXX.propties' //★ merge 'LICENSE.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/license.txt' exclude 'META-INF/notice.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } }
packageタスク以前でエラーになってしまうケースも有る
で、その場合jarを解凍して除くみたいな形になる
- unzip
- ファイル除く
zip <= ココでNG
jarからexclude指定がうまくできないのでファイル除いてリパッケするときに必須
http://www.ne.jp/asahi/hishidama/home/tech/java/jar.html
補完index周りの話
- ただし除外していい対象フォルダが素人にはわからない*3
- 除外しすぎると次回開く時に、プロジェクト情報が不正 と言われ再作成される
やり方は、除外したいフォルダ(Realmだと buildとか.externalNativeBuildあたり)をProject viewで選択して、Find action (⌘⇧A)からExcluded (Excludeではない)を実行してAS再起動。
— zaki50 (@zaki50) 2017年6月27日
.@zaki50 Ralm Java自体の開発してないとそれほど劇的な改善とはならないかもしれないけど、indexingに時間がかかって困ってる人は試す価値あると思う
— zaki50 (@zaki50) 2017年6月27日
操作補足
- 上記の呟きでうまくできなかったので、再検証
- フォルダ単位の指定のみ出来る*4
- 因みにExclude解除ができない
- あと除外推奨フォルダ自体がよくわからないので、それ程劇的には変わらず
zakiさんの補完index対象外し補足自メモ)
— close_yutori (@kimukou2628) 2017年6月28日
cmd+shift+A findAction
ProjectView>Projectに変更
オレンジ色マークされたら除外されてる
因みに
- 一時的補完無視=PowerSaveモードというIDEAででいている機能を使うと
- IDE再起動するまでそれ以降補完が効かなくなる
というG様バグが存在している・・
android studio
— close_yutori (@kimukou2628) 2017年6月22日
PowerSaveMode をonにすると
[Gradle Syncが行えません]
と表示されてSync実行ブロック
でoffに戻しても変に状態保持してて
invalidated cache and restartが必要になる
前提条件厳しすぎ
TLメモ
Android Studio激重問題、Kotlinとプラグインを1.1.3から1.1.2-5にダウングレードしたら直った
— kobakei (@kobakei122) 2017年6月28日
3.0ってkotlinな人のためのIDEだと思ってたんだけどな・・・(遠い目
canary5にアップデートしたらgradle syncで失敗するばかり。2.3.3でやろうと思ったらinstant-appで使うfeatureプラグインが認識できないらしく、仕方ないのでcanary4に戻すことにした
— gen (@gen0083) 2017年7月1日
org.gradle.configureondemand=falseにしたら解決した。issue報告したからこそ得られた情報である
— gen (@gen0083) 2017年7月1日
一応 gradle plugin 3.0-X ベースでビルド通らないか
毎回最新版出る度に試して入るんですけどビルドが通らないですね・・うーん。