読者です 読者をやめる 読者になる 読者になる

使いずらいよ Android Studio 2.2 RC

android AS gradle

概論

なんかどんどん酷くなってきているので、罠回避の為にメモ。

完全新規のみだったら問題ないんだけど・・。正直過去互換捨てすぎ。

androidって周辺全部挙げないと現在エラーになる作りになってる。

gradle pluginだけ上げなければいいやと安易に思っていると痛い目を見てます

android gradle plugin 2.2.0-RC の挙動

ちょっとだけ強化されたところ

  • build.gradle等 で ANDROID_HOME内に存在しない targetを指定した時
    • 自動的にDownloadが始まります
    • 以前はbuild taskがエラー終了していたので、jenkins とかでビルドの対策だと思う。

9/9 RC2の android gradle plugin

library-project形式のプロジェクトがビルドできなくなりました。(RC1までならOK)

新規Wizとかでつくられるaar参照形式はOK。

これを

  • デグレと見るか
  • G様のlibrary-project形式サポート、今後はしたくないよ の意思表示と見るか

今後の更新待ちですかね・・・(汗

support-v4系のライブラリ

これ 24.+ とか指定してるんですけど

target-10/minsdk 10 指定しろ

このチェックがビルド前にがっつし入ってビルドができない>< *1

  • AndroidManifest.xml
  • build.gradle

辺りが強化されたような挙動

特に ResoucesCompatとか 大量にdeplicateとかエラー表示されたくなかったら置き換えろ

とかいうのがお作法としたいならなら安易にあげちゃ駄目じゃない?

因みに androidの公式refrence参照すると api level 4の記載のまま。。

これ多分

dependencies {
    compile "com.android.support:support-compat:24.2.0"
}

のaarが新規追加されていて(分離?)、今ASの新規プロジェクトを作ろうとすると

api-10からの指定だからそのまま作ってこの状態でリリースされている臭いんだよな。雑過ぎ。

これ因みに、library-projectが

  • フォルダ参照ではなく
  • aar圧縮済み参照

だと 改良された? ManifestMager様 がSkipするらしいんだけど・・

library-project形式で入れている奴がかなりガタガタになっている気がしますね

ResoucesCompat に関して追記

dependencies {
    compile "com.android.support:support-v4:24.1.1"
}

なら target-v4 なので問題なし。

もしくは

support-compatのaarを拡張子zipにして、内部のjarをそのまま持ってくるか

辺りにすればOK。

そもそも引っかかってるのaarに同梱されているAndroidManifest.xml のせいですし・・・

まあG様が v9以上にしたいのはわかるけど、gradleの自動補完で勝手に上げられてもな・・・

build.gradleのextバージョン指定がIDEに認識されない

  • rootのbuild.gradle
project.ext{
    supportVersion="24.+"
}
  • ASで認識しない例
dependencies {
    compile "com.android.support:support-compat:${supportVersion}"
}   
  • =>ASに強制書き換えされて認識される *2
dependencies {
     compile "com.android.suppor:support-compat:24.2.0"
}   

正直これデグレったな・・とか思ってます

AS移行で動かせないプロジェクトは未だ多し

はいいんだけど、2.1/2.2 でビルドできない奴が多い

  • 精々到達して 2.0
  • 駄目なら 1.3系のまま

だいたいは傾向は見えていて

  • フォルダ参照型のlibraryProjectを使う場合
    • aar参照型は比較的安定してる
    • ただこの頃、ローカル参照型aarの挙動がおかしくなる時が・・*3
  • srcSetで ソースの位置等を指定している場合
    • 細かいリビジョンが上がる度によく動かなくなるので、動作テストしてなくて、基本エラーFB待ちなのかも。

まずどのバージョンでビルドできるか調べるところからなんだよな・・・(汗

でなんとか動くようになった、この古いやつをASで編集したり動かしていると

[2.2.Xにしてくれないと困ります]
  • で強制的に書き換えようとする
  • =>ウッカリボタン押す*4
  • =>ビルドができない
    • gitのlatest差分やlocal historyみて参照を戻す

ビルドできるバージョン確認とかに時によくハマる話

  1. gradle clean のキャッシュ消去は必須です

    1. 酷いものだと,build task時にライブラリを落としてくるものが有り
    2. AS上で --offlieを指定していて gradles task で必要な時ライブラリ が効かないケースが有り。。
  2. android gradle pluginのバージョンを変更した時

    1. gradlew --stop は必須です
  3. gradle wraperのバージョンを変更した時
    1. gradlew --stop は必須です

NullPointerException/Irigal Exception とかよく分かんないエラーが出始めたら、ココらへん*5*6

  1. ここらへん揃えないと、resourceのコンフリクトエラーでハマる
compileSdkVersion 23
buildToolsVersion "23.0.3"

dependencies {
    compile 'com.android.support:appcompat-v7:23.+'
    compile 'com.google.android.gms:play-services:8.4.+' //compile sdk 23 等に対応するsdk
}

場合によっては、android gradle plugin も揃える必要があり*7

正直、対応表を作って欲しいよな。。とか思う。

こっちはライブラリとか指定してるだけなのにエラー出されても困る・・

*1:AndroidManifest.xmlを見る限り target-9なのだが、なんかgradle pluginの判定が暴走してる??

*2:それまでリソースが真っ赤

*3:http://と file:// あたりの解釈問題? これjdkのせい??

*4:仕事場ではピタゴラスイッチと呼んでます><

*5:内部でエラーになっているらしいけど。。

*6:前はIDE側で終了させてから実行させていた挙動。2.2Betaあたりで高速化の為にやめたっぽい

*7:android gradle plugin 2.1 等