[譯] 怎樣用 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… 來安裝插件。

當你安裝完插件后,你需要重啟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的細節(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ā)送反饋問卷,我們給這個問卷添加多一個輸入框輸入你的姓名,當你完成反饋的時候會彈出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)用將會重新啟動?;蛘吣闾鎿Q或改動了已經(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 多的多的,當然,希望 Google 后續(xù)能夠讓 Instant Run 支持更多的特性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容