[譯] 怎樣用 JRebel for Android

只要你的項目相對較小,開發(fā)Android應(yīng)用的用戶體驗還是很棒的。然而隨著項目功能的增加,你會發(fā)現(xiàn)構(gòu)建項目的時間也會隨著增長。這種情況會導(dǎo)致你的大部分時間都花在如何更快的構(gòu)建項目,而不是為應(yīng)用增加更多的價值。

網(wǎng)上有很多教你如何加快Gradle構(gòu)建速度的教程。有一些很好的文章,譬如“Making Gradle builds faster”。 通過這些方法我們可以節(jié)省幾秒甚至幾分鐘的構(gòu)建時間,但是仍然存在一些構(gòu)建上的瓶頸。舉個例子,基于注釋的依賴注入使得項目架構(gòu)清晰,但是這對項目構(gòu)建時間是有很大影響的。

但是你可以嘗試一下使用JRebel for Android。每次改動代碼后不需要重新安裝新的 apk。而是在安裝完一次應(yīng)用后,通過增量包傳遞到設(shè)備或者模擬器上,并且能夠在應(yīng)用運行時進行更新。這個想法(熱部署)已經(jīng)在JRebel的java開發(fā)工具上面使用超過8年的時間。

拿Google IO 2015 app來看看如何使用JRebel for Android,以及它能為我們節(jié)省多少寶貴的時間。

安裝 JRebel for Android

JRebel for Android 是一個Android Studio的插件,你可以直接點擊IDE的 Plugins > Browse Repositories 鍵入“JRebel for Android”來搜索和安裝插件。

如果因為某些原因你無法訪問 maven 的公有倉庫,你可以直接在 JetBrians 官網(wǎng)下載,然后通過 Plugins > Install plugin from disk… 來安裝插件。

當(dāng)你安裝完插件后,你需要重啟Android Studio,在重啟之后,你需要提供你的姓名和郵箱來得到JRebel for Android的21天免費使用。

用 JRebel for Android 來運行你的應(yīng)用程序

安裝完插件后,只需要點擊 Run with JRebel for Android 按鈕,它會檢測這次代碼與上次是否有改動,然后決定是否構(gòu)建一個新的apk。Run with JRebel for Android 其實和Android Studio中的 Run 操作是一樣的。所以有同樣的運行流程,首先需要你選擇一個設(shè)備,然后再構(gòu)建apk安裝到那臺設(shè)備上去。

為了更新代碼和資源,JRebel for Android 需要處理項目 classes,并嵌入一個代理應(yīng)用。JRebel for Android只會運行在調(diào)試模式下,所以對于正式發(fā)布的版本來說是沒有影響的。另外,使用該插件也不需要你在項目中做任何改動。想要知道更多JRebel for Android的細(xì)節(jié),請看under the hood post。(譯者注:InfoQ的一篇介紹JRebel for Android的文章寫的不錯。)

所以在Google IO 2015應(yīng)用上點擊 Run with JRebel for Android 將會得到如下的結(jié)果:

在JRebel for Android應(yīng)用代碼修改

Apply changes 按鈕是使用 JRebel for Android的關(guān)鍵,它將會做最少的工作來將你代碼的改動更新到你的設(shè)備上去。如果你沒有使用 Run with JRebel for Android 來部署應(yīng)用的話,Apply changes 將會幫你做這部分的工作。

現(xiàn)在讓我們在應(yīng)用上做一個簡單的功能改動。針對于GoogleIO中每一個舉行的子會場你都可以發(fā)送反饋問卷,我們給這個問卷添加多一個輸入框輸入你的姓名,當(dāng)你完成反饋的時候會彈出Toast來感謝你的反饋。

步驟一:session_feedback_fragment.xml 中添加一個EditTex組件。

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
        android:id="@+id/name_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</FrameLayout>

步驟2: 調(diào)整間距

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="@dimen/padding_normal"
    android:paddingStart="@dimen/padding_normal"
    android:paddingRight="@dimen/padding_normal"
    android:paddingEnd="@dimen/padding_normal"
    android:paddingTop="@dimen/spacing_micro"
    android:paddingBottom="@dimen/padding_normal">

步驟3: 添加提示

<EditText
    android:id="@+id/name_input"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/name_hint"/>

這些改動現(xiàn)在都是在同一個頁面上,每一次按下 Apply change 按鈕后,JRebel for Android都會調(diào)用Activity.recreate()。在最頂部的activity將會同樣的回調(diào)方法,就像設(shè)備從縱向切換到橫向那樣。

到目前為止我們都還只是改動resource文件,下面我們來改動Java代碼。

步驟4:SessionFeedbackFragment.sumbitFeedback() 方法中彈出Toast

EditText nameInput = (EditText) 

getView().findViewById(R.id.name_input);

Toast.makeText(getActivity(), "Thanks for the feedback " + 

nameInput.getEditableText().toString(), Toast.LENGTH_SHORT).show();

應(yīng)用重啟動 vs Activity重啟動

并不是所有的改動都會觸發(fā)調(diào)用Activity.recreate()的。如果你在AndroidManifest改動了一些內(nèi)容,一個新的 apk 將會被構(gòu)建并增加安裝。在這種情況下,應(yīng)用將會重新啟動。或者你替換或改動了已經(jīng)被實現(xiàn)的superclass或者interfaces的時候也會導(dǎo)致應(yīng)用重啟動。下面有一份完整的對照表:

為什么我要嘗試使用 JRebel for Android

下面我列出了最有說服力的理由,來讓你使用它。

  • 可以快速看到自己代碼改動的效果。
  • 可以有時間打磨素完美的UI,而不用浪費時間在構(gòu)建上。
  • 不需要在項目中做任何改動來支持 JRebel for Android。
  • 在調(diào)試程序的同時還能更新代碼和資源文件。沒錯,JRebel for Android支持調(diào)試器的全部特性。

譯者注

另外,Google 在前不久發(fā)布的 Android Studio 2.0 中也增加了類似 JRebel 功能,稱之為 Instant Run。可謂良心,畢竟不用花銀子去購買收費的 JRebel for Android, 不僅為我們節(jié)約了銀子還節(jié)約了時間。使用方法也很簡單,具體的可以查看官方文檔

但是 JRebel for Android 與 Instant Run 之間還是存在區(qū)別的,我在 JRebel 的官網(wǎng)中找到一篇對比的文章,他們之間的差別可以用下面這張圖概括。

JRebel for Android vs Instant Run

從對比圖中了解到其實 JRebel for Android 所支持的特性是比 Instant Run 多的多的,當(dāng)然,希望 Google 后續(xù)能夠讓 Instant Run 支持更多的特性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,732評論 25 708
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,484評論 2 45
  • 病房每人發(fā)了份問卷調(diào)查,第一個問題是:「你覺得你正常嗎?」
    U0閱讀 372評論 1 8
  • 發(fā)過兩期彩鉛人物,彩鉛只是國畫創(chuàng)作過程中的調(diào)和劑,放松神經(jīng)( ??? ? ??? ) 發(fā)一些最近畫的國畫,雅俗共賞...
    孟德兄留步閱讀 426評論 4 6