java8の夢が見れない Android Studio 2.4 Preview4

動作環境

  • macOS Sierra
  • 16G
  • HDDタイプのiMac
  • AS 2.4 Preview4

(ところにより挫折して AS 2.3に戻ったりしています)

結論からいうと

なんかG様公式発表を著名な方が言及し出すと、相変わらずブクマRTがすごいことになる状況だなー(苦笑

で結論から言うとjava8は遠い夢でした・・

というかさー。JackOptionのほうが、まだ低レベルtargetで動くからマシじゃね?*1

sakura_bird1 さんともリリースするアプリのminsdkに関して話したことあるんですけど

target-21 (OS5) がまだ最低ならわかるんだけど、target-24(OS7) とは突き抜けすぎよね・・

まだ1年以上は早いかも・・

調べた状況

Use Java 8 language features | Android Studio

が告知ページ。new build systemのサイトのほうは近々閉鎖されるみたいな話があるみたいですね。

古いアーカイブのページは下記になりますし

java8の標準サポートって、またいつもの如く一部だけだしなー

multi-try-catchもminsdk 19ですし、せめてこのバージョンにしていただきたかった。。

extra-vision.blogspot.jp

これ、AS2.4p3 の AnnotationProcesser使う時にInstantRun切るとビルドがエラーになる状況と似てる。

というか正直InstantRun環境でしかテストしてね~だろ!

勘弁してください。

因みに InstantRun offの状態で

  • AS 4系の端末にapk転送
    • 実行時にクラッシュ
    • provider と meta-dataで宣言しているクラス参照あたり
  • AS 6系の端末に同じapk転送
    • 正常実行

な現象が出ていて、検証端末が1個使えなくなってすごく不便になりました。*2

あと、proguardは何個か追加しました。proguardのlibrary最新強化されてるのかな?

因みにAS2.3でビルドすると両方とも正常に動きます

ビルド何かやらかしてしまっているんじゃないかなーと思いつつ。勿論下記の指定状態です

  • app/build.gradle
android {
  compileOptions {
      encoding = 'UTF-8'
      sourceCompatibility JavaVersion.VERSION_1_7
      targetCompatibility JavaVersion.VERSION_1_7
  }
}

まさか、海外に 4(死人)番号はリリース避ける みたいな文化ないですよね?(汗 *3

  • root/build.gradle
buildscript {
 repositories {
      jcenter()
      maven { 
          url 'file://Applications/Android Studio 2.4 Preview.app/Contents/gradle/m2repository' 
      }
      maven { 
          url 'file://Applications/Android Studio 2.4 Preview.app/Contents/gradle' 
      }
   }
}
  • そういえばJRebel for Androidとかも
    • 対象build.gradleをtmp等にコピーして持ってくる
    • 上記のmaven pathを追加
    • tmpのbuild.gradleを実行

みたいな感じで 自前でココのパスよく通してたなーとか思いつつ

で出力していて気づきました

  • root/build.gradle
task showVersion  {
    println "[android plugin version]" +  buildscript.configurations.classpath.resolvedConfiguration.firstLevelModuleDependencies.moduleVersion
}

と直下に書いておくと、build時に自動実行されるので確認が楽です。

gradle自体は

./gradlew --status

jps

とかで確認はしていたのですが、pluginのバージョンが確認できなくて不便だったので・・・

os7のimage作って試してみたけど、instant run有りにしてもビルドでこけるナウ。えー


TLメモ(AS2.4p4)

これJcenterにmodule上がったみたいなんだけど

local repoの設定消すと alpha-3でビルドされる。何故か、、訳わからん*4

TLメモ(AS2.3.1)

パッチバージョンらしいけどInstantRunの修正のみらしい

だだ1工程増えてるけど・・

gradlew cleanBuildCache clean
gradlew --stop

Invalidate Cashe and Restart でAS再起動

なんで AS2.3 => AS 2.3.1 にするだけで変なエラーが出るかなー。

多分中間キャッシュの仕様が変わったんだろうねー(汗

これStackOverFlowを漁ったら、AS2.3かららしいです。*5

  • HotSwap対応するためにnativeまで手を出した=>Arm Transtrationとぶつかった
  • ただOS6/OS7系のx86系イメージは、G様エミュでもまだリリースしていて対応している
    • genymotionのimageもほぼ近似なので動く

という流れみたい・・。

まあHAXM更新した時点で、更新されていないOS4/OS5のG様エミュ挙動微妙だったしな・・・*6

data-binding

これ指摘事項 data-bindingの公式ページには書いてあったけど、

G様書いていない暗黙仕様が変わったもんだと思ってました(汗

NDK対応

  • AS2.3だと
    • Android.mkはもうまともに動かなくて、
    • CMakesList.txtが必須

なのは理解はしてるんだけどね・・。対応したよ=>詳細はない だと厳しくね?

  • AS 2.2 で「CMake」対応も出来る
  • AS 2.3 では必須

といういつもの流れは違うかなーとか思いつつ。

◎◎出来るようになりました=>移行推奨期間開始

という扱いなのかねー。G様的には

TLメモ(その他)

たしかに日本語翻訳対応すごく遅いんだよな。。AdMobとかも含め・・

Android はPixel(OS7)の販売も含めRed Osianだから優先度低なのかねー

今GooglePlayのマーケット見ると、日本のページはChromeCastしか買えないなう・・


RuntimePermissionの話

  • これ onResume/onNewIntent とかに
    • 復帰判定コード=>権限がアレば処理

を組み込むということなんですけど、これはたしかに面倒でしたね(遠い目

これは Permission Dispatcher つかった所で解決できるやつでもないし・・

Permission Dispatcher はなー(遠い目

apt変換でbuildがよくコケることがあって*7、自前で実装しがち。たしかに上記の対応は面倒だけど。

  • baseFragment/baseActivity みたいなの作って
  • そこにPermission処理をゴリゴリ突っ込んで
  • 継承して利用

の形に自分はしています

自前で頑張る話は、下記参照

Permission Dispatcherの話は 下記参照

Qittaのページで作者様に質問したけど、スルーされてしまってるのでサポート状態はすごく微妙*8

作者様がQittaとかTwitterで最近でも定期的に宣伝しているので生きているプロジェクトのはずなんだけどね(汗

因みに、

自分だとmap v1のプロジェクトをメンテしてたりもするんですが下記な状態だったり

  • GoogleAPIs でビルドすると、
    • 初期状態で権限がデフォルトONでビルドされるまではいいけど
    • ON/OFF認識しない は実装が相変わらずG様雑い・・・*9

まあ GoogleAPIs に関して言えば、InstantRunでも謎エラーはいてビルドこけるしな・・

これみると instantRun動かすには compileSDK側にも手をいれること必須にもみえる。。。

*1:jackはjackでbuildが10分ぐらいかかるという別の問題はあるが・・・

*2:OS5の端末は別の方にもってかれてしまったので確認できずorz。target層としてはココらへんが一番多いからみたいで大人気!

*3:避けるとしたら13でしょうし・・・

*4:モジュールはネットから落とす挙動はしたんですが・・・

*5:確かに試しにAS2.2.3のInstantRunで動いたよ・・。ただColdSwap版HotSwap版は生成バイナリが違うんだろうな〜<遠い目

*6:そもそもInstantRunの推奨環境はOS6ですし・・

*7:apt利用libraryは干渉しやすい

*8:まあ一般開発者だから無視されているだけかもしれないが・・

*9:興味が薄いことは場当たり対応が多い気がする・・