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

Android Studio 2.2-preview5 一歩進んで二歩下がる話

android AS gradle

Android Studio 2.2-preview5 にあげたのはいいのですが・・・

Android Studio 2.2-preview5 に更新されて

android gradle plugin 自体も

  • 2.2.0-preview4
  • 2.2.0-preview5

と公式Repoでも公開されて9-patchもなおって、やっと使える・・・とおもったら

という状態orz

7/20追記 Android Studio 2.2-preview6

  • IrigalStateException は ADT形式の時に出る感じ。
    • IDEビルド時のみにInstantRunを引数与えて有効にする辺のチェック面倒くさくなったのかな?

  • まあ、jdkに関しても下記な感じなので色々と厳しくなっていく気がする
    • ちなみにjpsが全く動かなくなってるけどOracleの人気づいているんだろうか?*1

Canary Channel のバージョンとかだと

$STUDIO_HOME/Contents/gradle/m2repository
$STUDIO_HOME/gradle/m2repository

あたりにしか最新のpluginが公開されていなかったりとか*2

IDEからしか動かせないように

-Pandroid.inject.invoked.from.ide=true
def isIdeBuild() {
    return project.properties['android.injected.invoked.from.ide'] == 'true'
}

とか色々と仕掛けられていたりしそうですが、今回の修正とかどうなんでしょうね

DSL的には

  • 2.2.0-alpha4 の段階で下記の修正が入っているっぽいですが・・・
android {
    dexOptions {
        additionalParameters("jack.incremental" : true)
    }
}

でもこのオプション

でしか説明出てこないので、NビルドのJackAndJilll辺りが主流になるまで使わなそう

android {
    defaultConfig {
        javaCompileOptions { 
            annotationProcessorOptions {
                className 'com.example.MyProcessor'

   // Arguments are optional.
                arguments = [ foo : 'bar' ]
            }
        }
    }
}

どういう状況かというと

  • ADT形式で認識させるbuild.gradle を使用
  • 2.2.0-preview5 だとこれが下記のエラーを吐いて中断する

IllegalStateException (no message)

  • gradle本来の形式*3であれば問題ない
    • ADT形式の認識は、独自拡張?だからデグレやすいのかもな。。
  • 2.2.0-preview4 であればこのよく分かんないエラー吐かない

あたり

  • Instant Runを有効にした場合
    android.applicationVariants.all{ variant ->
        variant.outputs.each { output ->
            output.processResources.manifestFile = file('src/main/AndroidManifest.xml')
            output.processManifest.enabled=false
        }
    }

な設定をしている場合は、Irigal State Exceptionを投げよるのは知っているんですけどね。 G社様的ルールが追加になっているのか・・・?

IDEを更新することで変わったと思われる挙動

  • ASのよく分かんないチェッカーでpluginの指定を勝手に最新に変更しようとする
  • apk実行時にも Gradle Syncをバックグラウンドで実行しようとする
    • プロジェクト開き終わった後に、書き換えればビルドできるじゃん的な回避も無理。。。

うーん。期待値となんか違う。。。

ほかにも

  • Android-N/wear ビルドしたら、低いバージョンの端末、Emuratorには転送させない*4

とかあるしな。。*5

他にも気がついた点

  • Google Map のアプリみたいに

    • ConstraintLayoutの中に SupportMapFragmentの定義をするとエラー
  • Layout Editor

    • Project Wizard で作成しているのに ConstraintLayoutがレイアウトでエラーでてる*6*7
  • 4.0.3以下は Project Wizardでは作成できなくなってる。

    • しかもAPI 8とか指定すると、ユーザーいないですがよろしいんですか?? 辺りの警告が頻繁にでてウザい
    • 正直な処、Google Analyticsが対応していなくて情報取れていないだけだと思うんだが。。。*8

*1:jpsコマンド自体使ってる人少ないのかな? Linux系だったらpsでも事足りますし。。

*2:jRebelのpluginとかこの位置のLocalRepoちゃんと通して、修正したbuild.gradleをローカルに生成して、それで内部鯖でbuildしていたりする

*3:android maven plugin形式

*4:minSDK/manifest merger=false 等の設定を無視

*5:コマンドラインからadb installは問題なく出来るのですが・・。API Levelで部分的に動かすとかの動作確認テストがしづらくなってる

*6:ビルドはできてるけど・・

*7:ftlテンプレート自体が更新されていないっぽいが・・。エラーにするならテンプレート直せといいたいけど・・

*8:GooglePlay開発者サービスが更新されていないので、連携系もまともに動かないだけ