このままリリースされるの? Android Studio 2.3 Beta 4
はじめに
一部では 某戦記並みに「神を讃えよ」なRTが多発状態のG様の Android Studio ですが、
自分の開発環境で微妙な動きをしていたので備忘的なメモ
開発環境
Beta4にアップしたのですが・・・
Beta3=>Beta4 アップデートした直後にビルドエラーが頻発*1
jkill.sh
#!/bin/sh kill -9 `jps -lv | grep -v AppMain | grep -v "AndroidStudio" | grep -v "IntelliJIdea" | grep -v "sdkmanager" | awk '{print $1}'`
までしてやっとビルドが出来る状態。Beta3->Beta4 どこが軽微な修正なのかな?
久々に日本Androidの会MLを見たら平和だった pic.twitter.com/2XvcJOReYl
— すんでぶ (@ksksue) 2017年2月10日
確かに android studio 更新したての時、キャッシュ関連削除しないとかならずビルドエラーになるのは勘弁してほしいかな~
— close_yutori (@kimukou2628) 2017年2月13日
(.android/build-cashesは必ず物理削除が必要
一応下記のコマンドで .android/build-cache はクリーン出来るようなんですが
./gradlew cleanBuildCache
これjavaのタスクが掴んでると消してくれないんですよね・・当たり前の挙動かもしれないんですがorz
InstantRunが3-4回実行するとOOMが発生
- Beta3までは問題なかった。複数プロジェクト開いてもOK
- Beta4だと1個のプロジェクトでこの状態
- アクティビティモニター見るとメモリがバカバカ増えているようなのでリークしているっぽい
- 下記当たりをすると再び実行出来るようになるが、最初からInstantRunビルドし直し・・・
gradlew –stopでdaemon終了
- jpsでみて gradlewタスク経由で実行されているjavaタスクを終了
一応 16G Mac 環境なんだけどな・・・
でもこのままリリースされてしまいそうな気もしなくもない・・
InstantRun切れば問題なくなるんですけどね*2
ReleaseNoteとかの話を見ると・・
- InstantRunでNDKがエラーになるのを対処したよ
- ConstraintLayoutがレイアウトエディターとかでちゃんとPreviewできるようにしたよ
- Android Things Developer Preview 2 とか対応したよ
あたりっぽいんだけど、公開されていない修正が裏でゴリゴリありそう
Build Cacheに関して
gradle.properties
android.enableBuildCache=true //定義していない場合はAS2.3からはデフォルトtrue android.buildCacheDir=$HOME/.android/build-cache //定義していない場合はこの位置
Macでメモリ上に仮想ディスク作るソフトとかあれば android.buildCacheDir をそこにおいて高速化
とかWindowsみたいなことできそうだけど、普通に探すとなさそうなのでSSD環境で開発するのが現実的なのかも
- android.enableBuildCache=false
- この状態にするとInstantRunが意味なくなるほど遅くなる
- で、たぶんこれInstantRunとセットの設定かと思う
あとこのビルドキャッシュの問題なのは、
- ビルドエラーがでた時に中途半端なビルドキャッシュ/参照を消したはずのlibraryが残るとずっとビルドが失敗する
- clean/rebuildしても駄目*3
ということかな。これ改善されない限りこの機能って出してはいけない機能な気がするんだけど気の所為?
2/14追加謎挙動
以下の記述があるlibrary-projectのビルドが失敗した
- オフラインビルドにしているので、projectを開く時にエラー
- terminal で ./gradlew tasks を実行してライブラリDownload
- Gradle Syncボタンを押す
いつもならココまででOKですが、何故かずっとビルド失敗
- 一度下記の2行の記述をコメントして
- ビルド成功させる
- 元に戻す
- ビルド成功する。
pluginアップデート時に絡む何か特殊条件があるのかな・・正直すごい謎。
あとすごくシンプルな構成じゃないと基本駄目なのかもね。とはいつも思う
でもここ設定しておかないと
makeModuleをAS上から実行するときdebugAARが正常に生成されないんですよね、、*4
- build.gradle
android{ publishNonDefault true defaultPublishConfig "debug" }
というかproject open時のGradle Syncの強制はどうにかoffにできないものか・・
あれ無くすだけでストレスが堪らない人がすごい多いと思うんだけどね・・
2/18追記
Android Studioでlibs配下にjarファイル置いて、appレベルのbuild.gradleのdependenciesにcompileの定義書いたのに、jarファイル内のクラスがインポートできないんだけど、マジなんなの…。ググっても全然分からん。完全にハマった。
gradleファイルもcompile fileTree(include: [’*.jar’], dir: ‘libs’)ってあるので間違ってないはず。ググってもlibs配下にjarファイルを置いて、gradleに設定書けばおkって情報しか出ない。もうやだ。Androidトラウマ。
インポートできてないクラスのオブジェクトやメソッドをMainActivity始め、各クラスで使っているのになぜかビルドは通ってるのが本当に訳わからんぞ。でもリビルドするとエラー吐き出すんだよね。うふふふふふ帰ろうかな。
な呟きを見ていて、これも強キャッシュの影響だよな〜とか思い出しつつ
開発中のaar/jarの共有とか他の方はどうやってるんですかね〜
@omoiderecords ああ、それAS 2.2.3 か 2.3.Xなら compile files('libs/something_local.jar') みたいな形でベタに書かないとGradleSyncがよく失敗するというアホ仕様のせいですね。
@omoiderecords 対処法としては 1).idea/.iml を消して openし直す or 2)Build Cache が有効になってるなら そこら辺消す URL らへん参考になれば<コマンドで消すのは AS2.3系のみしか無
@omoiderecords compile fileTree(include: [’*.jar’], dir: ‘libs’) 使うならですが。まあ compile files('libs/hoge.jar’)でもjar中身更新すると認識しないという別のアホ仕様も有り
@omoiderecords 基本的には maven upload(localも含む)が基本で、完成されたもののみupload、更新されたものは version変更されて再アップはずだから問題ない みたいなG様思想なんですよね。自分も結構ハマります。。
このままリリースされるとしたら
とかな動作環境になりそう・・・
まあG様の開発は基本、最新のPCが会社から提供されるそうなのでまあ仕方ないのかもなーとか*5
おまけ
この話を仕事場のiOSエンジニアの方にしたところ
と突っ込み入れられましたorz
AS様は、97式みたいにベテランしか使いこなせない感じになっていくのかどうか
今後の状態を期待しつつ、次のバージョンを期待したいかも
おまけ 追記2/14
秋葉原で某戦記の乾パン貰ってきました・・たしかにタワー状態でしたw
職場でも、今は不景気なせいかチロルチョコ配布みたいなのとか遣らない感じみたいです*8
でもまあ個人ベースでもチョコあんまり食べなくなったかな〜(苦笑
改めて、「幼女戦記」乾パン配給会にお越しいただいた皆さん、本当にありがとうございました!!本日、帝国軍参謀本部から物資が届いたときの様子がこちら!無事配給完了いたしました!#youjosenki pic.twitter.com/KxsEFC6y0X
— 「幼女戦記」アニメ公式 (@youjosenki) 2017年2月14日
幼女戦記、乾パン特配Q&A①
— 同志カルロ・ゼン@新刊・その他 (@sonzaix) 2017年2月16日
Q:賞味期限は意図的なものですか?
A:ご質問の意図がわかりません。
Q:帝国の運命とと乾パンの賞味期限は同一視されるべきでしょうか?
A:全く異なります。
Q:11月11日?
A:偶然です。#youjosenki
幼女戦記、乾パン特配Q&A②
— 同志カルロ・ゼン@新刊・その他 (@sonzaix) 2017年2月16日
Q:なぜ、物資不足に?
A:申し訳ありません。ニーズの大きさを理解しそこなっていました。
Q:補給不足の実体験を提供するという意図は?
A:ございませんでした。本当です。
不手際をお詫びいたします(´・ω・`)#youjosenki
幼女戦記、乾パン特配Q&A③
— 同志カルロ・ゼン@新刊・その他 (@sonzaix) 2017年2月16日
Q:なぜ、ゼートゥーア将軍のイラストを?
A:女性がチョコを渡す文化は、日本独自のものです。他方、男性がものを渡すのも一つのやり方です。
我々は、中庸の観点からZEに配ってもらうことが最適だと判断したのです……。#youjosenki
幼女戦記、乾パン特配Q&A④
— 同志カルロ・ゼン@新刊・その他 (@sonzaix) 2017年2月16日
Q:①で誤字があった件について、真剣さが疑われます。
A:慌てており、お詫びを重ねるほかございません……。
Q:カフェインの精神はどうなっているのだ。
A:カフェイン(`・ω・´)#youjosenki