java8の夢が見れない Android Studio 2.4 Preview4
動作環境
(ところにより挫折して AS 2.3に戻ったりしています)
結論からいうと
おおAndroid Studio 2.4 Preview 4でJackじゃないJava8の機能入った(desugar??) https://t.co/ret1kVsk4m
— takahirom (@new_runnable) 2017年4月4日
なんかG様公式発表を著名な方が言及し出すと、相変わらずブクマRTがすごいことになる状況だなー(苦笑
で結論から言うとjava8は遠い夢でした・・。
というかさー。JackOptionのほうが、まだ低レベルtargetで動くからマシじゃね?*1
sakura_bird1 さんともリリースするアプリのminsdkに関して話したことあるんですけど
target-21 (OS5) がまだ最低ならわかるんだけど、target-24(OS7) とは突き抜けすぎよね・・
まだ1年以上は早いかも・・
調べた状況
android studio preview4
— close_yutori (@kimukou2628) 2017年4月4日
Jackとretrolamdaは記述があると誤動作するので削除しろとかいてある。
apt と annotaionProcesserと同じような関係なのかな?
multi try catchの標準サポートはざっとみた感じなさげ
android studio 2.4 preview4
— close_yutori (@kimukou2628) 2017年4月4日
lamda まだ未サポート
アノテーションの一部サポート
それ以外はminsdk 24
って誰が使うんだろう?
Use Java 8 Language Features | Android Developers
が告知ページ。new build systemのサイトのほうは近々閉鎖されるみたいな話があるみたいですね。
古いアーカイブのページは下記になりますし
最近、アーカイブ案内もこちらへ移ったと思います。https://t.co/gnTr00Iypx
— Pluu (@pluulove) 2017年4月4日
java8の標準サポートって、またいつもの如く一部だけだしなー
multi-try-catchもminsdk 19ですし、せめてこのバージョンにしていただきたかった。。
android studio 2.4 preview4
— close_yutori (@kimukou2628) 2017年4月4日
このバージョン、1_8指定する
instant run無効でビルドこける
android.enableDesugar=false指定
=>1_8指定すんなlintエラー
1_7指定のまま使えということ?
これ、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
}
}
android studio 2.4 preview4
— close_yutori (@kimukou2628) 2017年4月4日
またgradle plugin 2.4-alpha4 を
Contents/gradle/m2repository
だけに設置して、Jcenterに置かないパターンですか><
やめて欲しいねこの遣り方
maven { url 'file://Applications/Android Studio 2.4 https://t.co/MwmE1jqdV6' } と書くのに必要 https://t.co/yrekc9TPfx #gradle
— close_yutori (@kimukou2628) 2017年4月4日
まさか、海外に 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' } } }
みたいな感じで 自前でココのパスよく通してたなーとか思いつつ
vote16の showVersion使えますね! / “How can I check which Gradle Android plugin version is used in my pr…” https://t.co/vunc5bMeee #gradle #android
— close_yutori (@kimukou2628) 2017年4月4日
で出力していて気づきました
- root/build.gradle
task showVersion { println "[name ]" + buildscript.configurations.classpath.resolvedConfiguration.firstLevelModuleDependencies.moduleName println "[version]" + buildscript.configurations.classpath.resolvedConfiguration.firstLevelModuleDependencies.moduleVersion }
と直下に書いておくと、build時に自動実行されるので確認が楽です。
gradle自体は
./gradlew --status
jps
とかで確認はしていたのですが、pluginのバージョンが確認できなくて不便だったので・・・
android studio 2.4 preview4
— close_yutori (@kimukou2628) 2017年4月6日
databinding有効=>NG
annotaionProcesser指定のみ=>OK
MockWebServerがdependenciesにあり=>NG
jdk15のmoduleがあるせい
os7のimage作って試してみたけど、instant run有りにしてもビルドでこけるナウ。えー
TLメモ(AS2.4p4)
Android Stuido 2.4.0-alpha4 / retrolambda 組み合わせでビルド失敗した。
— Pluu (@pluulove) 2017年4月4日
こんなメッセージも出た
— Pluu (@pluulove) 2017年4月4日
One of the plugins you are using supports Java 8 language features. remove the following from your build.gradle
Use Java 8 language features | Android Studio https://t.co/heyEZXSGNi これを見る限り当分はRetrolambda + Lightweight Stream APIは手放せなさそう
— さるほぼ提督 (@nagakenjs) 2017年4月4日
de-sugarとは全然関係ない話だけど、default/static interface methodsはInstant Runでサポートされていないのか。どの型に影響するかわからないってことかな。 https://t.co/zbzM7DCX1M
— Atsushi Eno (@atsushieno) 2017年4月5日
AGP 2.4.0-alpha4はmaven {url 'file:///Applications/Android Studio 2.4 https://t.co/7bUCGzYoeV'}書けばコマンドラインからでも使えるけど一回gradle daemonをkillする必要がある
— zaki50 (@zaki50) 2017年4月5日
Android Gradle Plugin 2.4.0-alpha4でJava8 featureを有効にしたときにRealmがちゃんと使えるか試してみたけど問題なさげだった https://t.co/sVn0Yi9LJH
— zaki50 (@zaki50) 2017年4月5日
centerにandroid grade plugin 2.4.0-alpha4がアップロードされたようだ
— zaki50 (@zaki50) 2017年4月5日
これJcenterにmodule上がったみたいなんだけど
local repoの設定消すと alpha-3でビルドされる。何故か、、訳わからん*4
Android Studio 2.4 p4 で使えるようになった (Gradle Plugin 2.4.0 α4) 、 Java 8 対応だけど、やっぱり Data Binding 非対応……?
— Ryutaro Miyashita (@ryugoo_) 2017年4月5日
TLメモ(AS2.3.1)
パッチバージョンらしいけどInstantRunの修正のみらしい
Android Studio 2.3.1にあげて、InstantRun使っていないプロジェクト開いたらこのエラーが出て困ってる(customtabsでエラー出た。)=> 一応解決した / “And…” https://t.co/ojhn1vjwlk #andoid #gradle
— close_yutori (@kimukou2628) 2017年4月5日
だだ1工程増えてるけど・・
gradlew cleanBuildCache clean gradlew --stop Invalidate Cashe and Restart でAS再起動
なんで AS2.3 => AS 2.3.1 にするだけで変なエラーが出るかなー。
多分中間キャッシュの仕様が変わったんだろうねー(汗
なんかAndroid Studioでデバッグ中のEditableのlengthとtoStringは謎の力によって初期化前にアクセスされてる気がしたので例外処理入れた。
— 四九六々(縦書き用) (@496_) 2017年4月5日
Android StudioではEditable実装クラスの初期化中にブレークポイントを踏むと、まだ初期化してないけどデバッグ用にEditable実装クラスのthisの内容表示でtoStringが呼ばれるみたい。
— 四九六々(縦書き用) (@496_) 2017年4月5日
今デバッグに使ってる端末だと発生するバグに悩まされている。
— 四九六々(縦書き用) (@496_) 2017年4月5日
これStackOverFlowを漁ったら、AS2.3かららしいです。*5OS6以下のx86 imageに対して、Android Studio 2.3 の InstantRunを使うと発生(Installができない)。無効にするとinstall可。まあ実機でもOS5とかInstantRun不安定だけ… https://t.co/z8WaAcMsez …
— close_yutori (@kimukou2628) 2017年4月6日
- HotSwap対応するためにnativeまで手を出した=>Arm Transtrationとぶつかった
- ただOS6/OS7系のx86系イメージは、G様エミュでもまだリリースしていて対応している
- genymotionのimageもほぼ近似なので動く
という流れみたい・・。
まあHAXM更新した時点で、更新されていないOS4/OS5のG様エミュ挙動微妙だったしな・・・*6
data-binding
gradle plugin 2.3.0からあるバグが2.3.1でも直ってなかった。これ直してくれないかなぁ。https://t.co/pT9Nk44v0b
— すたぜろ (@STAR_ZERO) 2017年4月5日
これ指摘事項 data-bindingの公式ページには書いてあったけど、
G様書いていない暗黙仕様が変わったもんだと思ってました(汗
NDK対応
forループのロジック処理自体はJavaとCで大差ないっていったやつだれだよ。並列処理する前に3倍ぐらい速くなったぞwww
— くろくる (@kuro_kuru2) 2017年4月5日
— くろくる (@kuro_kuru2) 2017年4月5日
openmpの使い方じゃなくてcmakeで有効にする方法が全くわからんgccみたいに-fopenmpじゃないのか
— くろくる (@kuro_kuru2) 2017年4月5日
c++11のhevy_stack使ったほうが早かったんじゃないかこれ(
— くろくる (@kuro_kuru2) 2017年4月5日
駄目だっていうかこれclangが対応してなくね・・・?
— くろくる (@kuro_kuru2) 2017年4月5日
3.7からopenmp対応したっぽいけどAndroid Studioに入ってるのバージョンいくつだ・・・
— くろくる (@kuro_kuru2) 2017年4月5日
だめだ、NDKがClang帝国になってやがる
— くろくる (@kuro_kuru2) 2017年4月5日
たぶんこれ入ってるの3.6か・・・?
— くろくる (@kuro_kuru2) 2017年4月5日
Android clang version 3.8.256229 (based on LLVM 3.8.256229)
— くろくる (@kuro_kuru2) 2017年4月5日
Target: x86_64-unknown-linux
Thread model: posix
うーん
もう諦めた・・・std::thread使おう
— くろくる (@kuro_kuru2) 2017年4月5日
もう諦めた・・・std::thread使おう
— くろくる (@kuro_kuru2) 2017年4月5日
forループ外の変数いじってたから並列処理したら爆死した(詰
— くろくる (@kuro_kuru2) 2017年4月5日
しかもスレッド自体は正常に動いてるけど、あんまり速くならなかった死にたい
— くろくる (@kuro_kuru2) 2017年4月5日
- AS2.3だと
- Android.mkはもうまともに動かなくて、
- CMakesList.txtが必須
なのは理解はしてるんだけどね・・。対応したよ=>詳細はない だと厳しくね?
- AS 2.2 で「CMake」対応も出来る
- AS 2.3 では必須
といういつもの流れは違うかなーとか思いつつ。
◎◎出来るようになりました=>移行推奨期間開始
という扱いなのかねー。G様的には
TLメモ(その他)
AndroidのbuildConfigField、文字列や数値だけじゃなくてenumも定義できるんかhttps://t.co/GVaQkFzZQ5
— むろほし (@RyotaMurohoshi) 2017年4月5日
まさかと思ってサイトのロケーションを英語にしてみたら、r14bのダウンロードリンクもあるし、ちゃんと更新されていた・・・。日本語ロケーションが対応していないだけかい!
— けいちゃ (@keicha_hrs) 2017年4月5日
先生ごめんね。でも日本法人何しとるんだ。 https://t.co/tzONMFHDGb
たしかに日本語翻訳対応すごく遅いんだよな。。AdMobとかも含め・・
Android はPixel(OS7)の販売も含めRed Osianだから優先度低なのかねー
今GooglePlayのマーケット見ると、日本のページはChromeCastしか買えないなう・・
RuntimePermissionの話
今さらながらの Runtime Permission 対応、トレンド用の位置情報取得という非常にプライオリティの低い部分でひとまず Permission Dispatcher 使わずに対応してみたけどすげー面倒くさかった。
— 竹内裕昭 (@takke) 2017年4月3日
「今後表示しない」チェックされてからの復帰ルート作るの大変なんだな。
— 竹内裕昭 (@takke) 2017年4月3日
- これ onResume/onNewIntent とかに
- 復帰判定コード=>権限がアレば処理
を組み込むということなんですけど、これはたしかに面倒でしたね(遠い目
これは Permission Dispatcher つかった所で解決できるやつでもないし・・
本体の起動処理は大変複雑なのでどこにパーミッションチェック入れ込むかで大変悩ましい
— 竹内裕昭 (@takke) 2017年4月3日
Permission Dispatcher はなー(遠い目
apt変換でbuildがよくコケることがあって*7、自前で実装しがち。たしかに上記の対応は面倒だけど。
- baseFragment/baseActivity みたいなの作って
- そこにPermission処理をゴリゴリ突っ込んで
- 継承して利用
の形に自分はしています
自前で頑張る話は、下記参照
Permission Dispatcherの話は 下記参照
Qittaのページで作者様に質問したけど、スルーされてしまってるのでサポート状態はすごく微妙*8
作者様がQittaとかTwitterで最近でも定期的に宣伝しているので生きているプロジェクトのはずなんだけどね(汗
因みに、
自分だとmap v1のプロジェクトをメンテしてたりもするんですが下記な状態だったり
- GoogleAPIs でビルドすると、
- 初期状態で権限がデフォルトONでビルドされるまではいいけど
- ON/OFF認識しない は実装が相変わらずG様雑い・・・。*9
android
— close_yutori (@kimukou2628) 2017年4月4日
GoogleAPIs:24 でビルドすると、
設定画面で権限消しても
context.checkPermissionsで常にGRANTで返ってくるので困ってる
instant runも謎エラー吐いてビルドとまるしな、、
まあ 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:興味が薄いことは場当たり対応が多い気がする・・