20
JRebel for Android 1.0 を試食してみた @kimukou2628

JRebel for Android 1.0 を試食してみた

Embed Size (px)

Citation preview

Page 1: JRebel for Android 1.0 を試食してみた

JRebel for Android 1.0 を試食してみた

@kimukou2628

Page 2: JRebel for Android 1.0 を試食してみた

つい最近のandroid関係で調べてたこと(1)

android grade plugin のversionが上がった

2.0-prev4 => 2.0-prev6 (2割ぐらい遅くなった)

InstantRun前提のBuildになったから?

どうも以下の挙動が頻繁だからのよう

ライブラリプロジェクトのビルド/リソースチェックが頻繁(aar運用前提?)

grade Deamonから発行されるjavaタスクがよくロックされて戻ってこない(要Kill)

ロック時にIDE側でdeamon再起動、cleanタスク発行 (gradle Deamonの再起動コストがかなり重い)

Page 3: JRebel for Android 1.0 を試食してみた

つい最近のandroid関係で調べてたこと(2)

android grade plugin のversionが上がった

InstantRunはちょっとだけ状況改善

Macでは,ADT形式&Library Project有なプロジェクトでも なんとかビルドは通るようにはなったよ(Winでは変わらずNG)

Win上開発前提でInstantRun使えない前提だとすると

コマンドライン(Terminal窓)でビルド

adbでapkインストールが一番早いみたいな話になってしまう。。。

./gradlew assembleDebug -x :libP:assembleDebug -x test —offline

Page 4: JRebel for Android 1.0 を試食してみた

つい最近のandroid関係で調べてたこと(3)

gradle-2.11-rc-1 GradleDeamon がJPSの対象になった タスクのJavaプロセスはJPS対象になってない ロックかかったタスクの終了させたい面では微妙

Windows特有の問題なのだろうか? でもAndroid開発者でWin端末開発が多いよね?

grade-wrapper.properties を下記に変更で試せます

distributionUrl=https\://services.gradle.org/distributions/gradle-2.11-rc-1-bin.zip

Page 5: JRebel for Android 1.0 を試食してみた

つい最近のandroid関係で調べてたこと(4)

Genymotion 2.6.0 に上がった QT4=>QT5に変更されてPlayerの起動が速くなった

ライセンス購入促すダイアログ毎回出るようになった

Jenkins関係でフリーでは使わせないよ! な糸

6.0 Previewのimageが追加されたよ

files.genymotion.com からのDLで、Proxy環境によってはソフトやova が落とせない(StackOverFlowで対応記事があるくらい)

Gappsは5.1の奴で動かせる。最新化はダメ

MIC等の対応はVBOX側頼み(Win無理、Macは可能?)

指紋認証/権限リクエストの挙動も動かない

Page 6: JRebel for Android 1.0 を試食してみた

ここからJRebel for Android 1.0 のお話今年1月に正式版 1.0 が出たらしい

デモビデオhttps://vimeo.com/124512575だからまだ サムライズム様でも取り扱いしてない?

Beta触った人の記事http://androhi.hatenablog.com/entry/2015/06/18/083000

JJUG CCCのイケメンさんの話だとWindowsでも問題なく動く話を聞いていたので興味が湧いた

試食するのは、プラグインレポジトリからPluginインストールして、Formにメアド登録のみで手軽

Page 7: JRebel for Android 1.0 を試食してみた

試食設定(1)プラグインレポジトリで JRebelで検索

再起動すると、入力フォームが出てくるのでメアド登録

登録が成功すると以下のフォルダにトライアル用のライセンスファイルが作成される

$HOME/.jrebel-android jrebel-android.lic rebel-android.prefs logs(フォルダ)

Page 8: JRebel for Android 1.0 を試食してみた

試食設定(2)トライアルライセンスはメアドユニークなので

$HOME/.jrebel-android を持っていけば他の端末で試食でそう(端末ロック有だと個人購入だとキツイな~><)

ライセンスには「開発者/年単位」で1ライセンス

トライアルモードで試せるのは Business 機能まで使える認識

通常実行

デバックモード実行

デバック通常実行

反映転送

Page 9: JRebel for Android 1.0 を試食してみた

ライセンス形態価格

(年/人)機能

Individual $49InstantRunみたいな状態(日本代理店で39800円?

Business $349デバック実行モード Multidex サポート

Ultimate(2016リリース予定) $599

複数端末同時転送 Instrumentation tests対応

複数端末同時転送は レイアウトちょこちょこ修正複数端末表示確認テスト(小さい/普通/タブレット) とかしてるので企業的には確かに便利かも

Page 10: JRebel for Android 1.0 を試食してみた

試食状況(1)ツールバーのJRebel用の実行ボタンを押すのみ

通常実行

反映転送ボタンで変更を転送破壊的変更でない限り、基本Activity再起動のみで反映

デバックモード実行(Betaの記事にはなかった)

デバック実行を抜けないままActivityリロード(公式サイトの説明だと、ステップデバック中に動的変更、転送できる?ように読めたがそれは出来なかった)

デバック

通常実行

反映転送

Page 11: JRebel for Android 1.0 を試食してみた

試食状況(2)実行ウインドウはモード別

初回実行時にbuild.gradleに記述が追加

反映転送

buildscript { repositories { jcenter() maven { url 'https://repos.zeroturnaround.com/nexus/content/repositories/zt-public-releases' } } dependencies { classpath 'com.android.tools.build:gradle:2.0.+' classpath 'com.zeroturnaround.jrebel.android:jr-android-gradle:1.0.+' }}apply plugin: 'com.android.application'apply plugin: 'com.zeroturnaround.jrebel.android'

Page 12: JRebel for Android 1.0 を試食してみた

試食状況(3)JRebelで通信する専用apkが専用タスクで生成

Android端末に転送される

このapkは端末から直接実行すると「IDEから実行してください」とスプラッシュがでて停止してしまう

開発PCの方にJRebel通信用のローカルサーバが立ち上がって Android端末と通信を始める

jps -v で確認可能

Gradleコンソールで見ると  :jrebelPrepereDebug で専用apk生成な形に見えるが 上記タスクをコマンドラインで実行 生成したapkはadb installできない

InstantRunもそうですがIDE側で何設定して動かしてるんでしょうね。。(汗

Page 13: JRebel for Android 1.0 を試食してみた

試食状況(4)JRebel通信用のローカルサーバの話

一定期間周期で接続確認ポーリングしてる

USBを抜き差ししても短時間なら継続可能

ちょっとした画面確認程度なら出歩けるこれが何気に便利だった

4系以上の端末が対象

まあ2系サポートとか今更でしょうけど(汗レガシープロジェクトは不滅ですorz

Page 14: JRebel for Android 1.0 を試食してみた

体感的な話(1):良かった点反映転送が速い 専用apkが立ち上がったあと(専用apkの起動自体は勿論重)

変更したら「反映転送」ボタン押下

:jrebelPrepereDebug タスクが速い

cleanとか libraryProjectの再ビルドとか余計なタスクを勿論遣ってない

Win環境でも1~5秒程度で転送確認可能

AS通常実行で ビルドのみで 30秒~1分 かかる環境変更ファイルのみの差分転送、適応だから?

JDIとかの技術なのだろうか・・・apkが再起動せず、基本現在表示中のActiviy Reloadな感じ

Stackに積まれているActivty反映とかはやはり無理?

Page 15: JRebel for Android 1.0 を試食してみた

体感的な話(2):微妙な面端末内のアプリがパツンと終了することがある

多分ローカルJRebel鯖との通信エラーで

特にデバックモードでゆっくりステップ実行とかすると再現率高 (JRebelのでも同じ)

IDE経由じゃないと起動できないapk

:jrebelPrepareDebug はassembleDebug は呼んでいるのでpatchが当たったapkだと想定(通常のapkファイルしか無い)

gradlew assembleDebugで作りなおしたapkで容易に上書き可能 :generateDebugJrebelLayout

:assembleDebug :jrebelCompileDebug :jrebelPrepareDebug

Page 16: JRebel for Android 1.0 を試食してみた

検証な話(1)Q)リアルにつかうとしたら Individual ライセンスだと思うので下記が実行可能か試した

JRebel実行プロセスアタッチ

A) 一応可能。ただしActivty Reloadタイミングでプロセスが切れるMultiDexなプロジェクトは試してない

bussinessじゃないと ビルド できない疑惑が。。。使えるプロジェクトが限定される?

Page 17: JRebel for Android 1.0 を試食してみた

検証な話(2)Q)どんなプロジェクトだと使ってて嬉しいか?

A) テストデータをコード/assets内にもってる奴テストコード使ってる案件のほうが少ない?

ASだとステップ実行で下記が頻繁 (ADTは可)値書き換えが上手くいかないローカル変数参照自体ができない??

書き換えてReload =>目視確認した方がすぐ確認できるレイアウトを黙視で微調整が必要な奴

HTMLレイアウトに近いので必須(iOSでもAutoLayoutプロジェクトは阿鼻叫喚気味)

Page 18: JRebel for Android 1.0 を試食してみた

検証な話(3)Q)どんなプロジェクトだと使ってて嬉しいか?

A) ちょっとしたクラスやレイアウトの追加/削除がReloadですぐ確認できる

開発がサクサクできる

人によってはJRebelデバックモードで内部値確認しながら開発する人もいるかも?

https://zeroturnaround.com/software/jrebel-for-android/features/

interface/super classの差替以外はReloadできるらしい

Page 19: JRebel for Android 1.0 を試食してみた

疑問点などIndividual ライセンスなら個人開発者レベルでもありかもなーと

ライセンス形態で不安なところIntelliJ みたいに複数端末インスト可だといいな~同時起動は1個で構わないので

ライセンス切れたら起動できなくなる?だとすると辛い

個人ベースだと IntelliJ みたいにアカウントログインで認証できると実は嬉しい

日本人が購入する場合、領収書辺りがネック?

JRebelとかって実際日本でどのくらい売れてるんだろう凄く気になる。。。

Page 20: JRebel for Android 1.0 を試食してみた

参考URL公式サイト

https://zeroturnaround.com/software/jrebel-for-android/

サムライズムのJRebelの説明ページ

http://samuraism.com/products/zeroturnaround/jrebel

JRebel for Android betaを試してみました

http://androhi.hatenablog.com/entry/2015/06/18/083000