Weitere ähnliche Inhalte
Ähnlich wie JRebel for Android 1.2.14 update (20)
Mehr von kimukou_26 Kimukou (8)
JRebel for Android 1.2.14 update
- 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. 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. JRebel for Androd最新状況(3)
• 従来通りのビルドで確認しないと駄目な処
• widgetの登録 /Appindexing / AppLink等のリンク起動系
• =>端末内のショートカットから起動するイメージになるので
「Android Studioから起動してね」スプラッシュがでてそこで止
まってしまう
• ただし、jrebelでビルドしたzipはpatched.apkと名前が分けられて
ビルド/転送されるので、従来のbuild.apkとは別になるので以前よ
り大分テストはしやすくなった
• 従来のapkはいつもどおり
assembleDebugで生成、普通にadb -r installで容易に差し替え可
能(すごく便利!)
- 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. 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. 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. 最新版の体感編(良)
• layout.xml => 即時反映を体感できるのは従来通り
• java => 上手く転送されているか凄くわかりづらい
• USBを抜き差し/adbの再起動 しないと上手く転送されないことも。。。
(これは「高速化されたadb」の不具合のせいなのかな〜)
• JRebelが変更監視はしているんだろうけど
変更有り=>adb push =>adbの転送がコケた=>再転送候補☆
☆辺りの判定が上手く言ってないんではないかな〜と予想される挙動
• 通常の使い方だと下記に統一されている動き
(デバック実行は、現在のところ一番下のライセンスでも使えるみたい)
ロケットマーク 起動も含めた再実行
デバックマーク デバック実行
更新マーク 起動している状態のアプリに差分転送
- 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. 実行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