Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JRebel for Android 1.2.14 update

697 views

Published on

日本Androidの会 埼玉支部 2016年6月 定例会 LT #antama
https://www.facebook.com/events/1764795240400550/

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

JRebel for Android 1.2.14 update

  1. 1. JRebel for Android 1.2.14 update (2016/06/11) @kimukou2628
  2. 2. JRebel for Androd最新状況(1) • 1.0.24 (February 17, 2016) • > JRebel for Android no longer needs changes to build.gradle files. Existing configuration is removed automatically. • android の gradle plugin として提供するのではなく 直接build.gradleを読み込んで、メモリ上で独自build.gradleを生成して、 同一JVMで独自パースしてビルドするようになりました • 高速化のためらしい。確かにgradle Daemonが環境によってはある意味ボトルネック な気も • IDEのMessageタブに表示されているので、IDE上のPluginで処理しているか、内部鯖 上でビルドしたコンソールをリダイレクトしてるか どちらか • <=そこまでは外見から判断できず。 • <= まあ 最近のandroid gradle plugin って加速度的にFatになっている気がしますので しょうが無い。。。
  3. 3. JRebel for Androd最新状況(2) • 現在最新版 は 1.2.14 (June 8, 2016) • 2週間に1回、偶数番号のリビジョンの最新版が公開 • 挙動的には大分安定してきた気がする • 内部gradleビルドははscala-runtime/jline等が同梱されているのでScala製? (jr-android-gradle-bundle.jar) • Android内部と内部サーバの通信はRetrofitを使用している(jr-android.jar) • rxjava等も使われているみたい • 完全javaオンリーというわけではなくndkも使っている (jr-android-native.zip) • ただ出来ないこともそれなりにあるのでこれだけで開発するのは無理
  4. 4. JRebel for Androd最新状況(3) • 従来通りのビルドで確認しないと駄目な処 • widgetの登録 /Appindexing / AppLink等のリンク起動系 • =>端末内のショートカットから起動するイメージになるので 「Android Studioから起動してね」スプラッシュがでてそこで止 まってしまう • ただし、jrebelでビルドしたzipはpatched.apkと名前が分けられて ビルド/転送されるので、従来のbuild.apkとは別になるので以前よ り大分テストはしやすくなった • 従来のapkはいつもどおり assembleDebugで生成、普通にadb -r installで容易に差し替え可 能(すごく便利!)
  5. 5. Android Studio 2.2 Preview 3 のお話 (1) • プロセスアタッチ • Auto/java/native/Hybrid から選択するようになっている (CLionとマージしたから?) • <= なんか実行しようとするとGradleビルドが始まって超怖いw (Java以外の時は必ずgradle buildが走ってしまう状態) • 従来のは、基本Javaのみで選択肢なし (NativeApplicationはnativeの方を自動選択) • LayoutEditor • 新規追加された ConstraintLayout あたりはちゃんと表示されるが 既存のカスタムレイアウト とか カスタムテーマ とか判定されてしま うのは レイアウトプレビューがかなりの確率で全滅(まだ Preview 1 の方が マシだった (AppCompatとかのレイアウト前提なのかな?)
  6. 6. Android Studio 2.2 Preview 3 のお話 (2) • ndk-debugが死にました • EditConfigでみるとnativeAplicationが廃止 • Application のdebuggerタブでAuto=>Java,native,hybridで切り替え (因みにこれ変更しても記憶されないバグ有り) • プロセスアタッチ • java以外はまともに動かない。は必ずビルドが走って=>接続失敗する • Hybridって、JJUG2016で話があった下記なのを想定しているのかは気になる・・・ • http://www.slideshare.net/kenjikazumura/python-gdb-java • ndkのプロセスアタッチが出来ない件は既にissueにあがってるのでそのうち治るの かな?(Preview4には修正が入るような記載はあるけど。。) • -PlibraryName=XXX を指定しろみたいなエラーが出ていますが。。
  7. 7. gradle warperの話 • gradle warper自体、現在下記が最新 • 3.0に関しては warperのgradleのバージョンを変更して gradlew tasks 実行時に incompatible と表示されるので 後方互換性はないようです • 3.0ベースになる段階で、またAndroid Dslの仕様が大 幅に変わる可能性が高そう 2.14-rc-5 OK 3.0-milestone-1 NG
  8. 8. 最新版の体感編(良) • layout.xml => 即時反映を体感できるのは従来通り • java => 上手く転送されているか凄くわかりづらい • USBを抜き差し/adbの再起動 しないと上手く転送されないことも。。。 (これは「高速化されたadb」の不具合のせいなのかな〜) • JRebelが変更監視はしているんだろうけど 変更有り=>adb push =>adbの転送がコケた=>再転送候補☆ ☆辺りの判定が上手く言ってないんではないかな〜と予想される挙動 • 通常の使い方だと下記に統一されている動き (デバック実行は、現在のところ一番下のライセンスでも使えるみたい) ロケットマーク 起動も含めた再実行 デバックマーク デバック実行 更新マーク 起動している状態のアプリに差分転送
  9. 9. 最新版の体感編(否) • デバック実行ができるのですが、 デバック中にエラーで落ちるとadbの切断が切れる • USBを繋ぎ直すと復帰 • これに関してはadbの高速化が歌われ初めててた頃から 通常のdebug実行でも同じ現象が出て不安定だったので、そちらのせいかもしれな い • AlertDialogを出した状態でreloadをする =>Listnerが消えて閉じれなくなる • データを消して再起動させるテストが辛い。 • データ消去をした時点でアプリが終了されるので、 IDEからロケットマークで再起動が何気に面倒 • 起動させ方がどうも特殊なようだから、現状はJRebel側も対応難しいかも
  10. 10. 最新版の体感編(驚) • 通常と違う起動の仕方のせいか、実はMultiDexでビルドできない状況でも • ビルドできて転送できてしまったりする。 • インストール&起動のさせ方が違うからかな? • 最近のMultiDex/InstantRun事情 • ADT形式のサポートがされていない • manifest.src 等の宣言が無視されている • issueには上がっているけど回答はない状態 • Manifestの位置/ManifestMarger関係に手を入れるのが難しい? 下記あたりの宣言があるとInstantRunはエラー、MultiDexは無視される android.applicationVariants.all { variant -> variant.outputs.each { output -> output.processResources.manifestFile = file("${projectDir}/AndroidManifest.xml") output.processManifest.enabled = false
  11. 11. 実行logから追う挙動的な動き • apkをインストールする時 • アプリを実行する時 (サービス経由から起動?) adb get-serialno adb push ./irof_history/build/jrebel/data/debug/work/patched.apk /data/local/tmp/.jrebel.com.irof.irof_history.apk adb shell pm install -r /data/local/tmp/.jrebel.com.irof.irof_history.apk adb shell rm /data/local/tmp/.jrebel.com.irof.irof_history.apk adb shell am start -n com.irof.irof_history/com.zeroturnaround.jrebel.android.boot.jRebelActivity -ez jrebelStart true adb push /XXXX/jrebel8615508642593902281emptyfile /data/local/tmp/.jrebel.com.irof.irof_history.status adb shell chmod 0777 /data/local/tmp/.jrebel.com.irof.irof_history.status adb push /XXXX/jrebel8615508642593902281emptyfile /data/local/tmp/.jrebel.com.irof.irof_history.error.json adb shell am startservice -e serviceId XXXX -n com.irof.irof_history/com.zeroturnaround.jrebel.android.boot.AgentStatusService --user 0

×