新版本Android Studio 3.5以上版本新特性(Apply Changes and Restart Activity 和 Apply Code Changes)

Apply Changes 是通過利用Android 8.0(API級別26)或更高版本中支持的 Android JVMTI(https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#bc1)技術(shù)。所以如果想使用Apply Changes有兩個條件:

Apk必須是debug包

必須在Android 8.0以上的手機上運行

Apply Changes按鈕在菜單欄上,在運行的右側(cè)新增兩個按鈕,如下圖

1,Apply Changes and Restart Activity:嘗試通過重新啟動活動但不重新啟動應(yīng)用程序來應(yīng)用資源和代碼更改。如果有代碼和資源的修改可以使用這個來使代碼和資源即時生效。

2,Apply Code Changes:嘗試僅應(yīng)用代碼更改而不重新啟動任何內(nèi)容。如果只有代碼修改,可以使用這個來使代碼生效。如果修改了代碼和資源,請使用“Apply Changes and Restart Activity ”。


架構(gòu)

接下來我們研究下ApplyChanges的實現(xiàn)原理。ApplyChanges的核心是要找出AndroidStudio構(gòu)建出來的apk和已經(jīng)安裝到手機設(shè)備apk的差異。找出差異后,然后將差異發(fā)送到手機上執(zhí)行差異合并。

Instant Run

1、Gradle版本是2.0.0以上? ? 2、minSdkVrsion設(shè)置到21以上。

熱修復(fù)

? ? Android Studio會監(jiān)聽在開發(fā)過程中哪個文件發(fā)生了改變,并且通過一個自定義的Gralde task來只對修改的class文件生成對應(yīng)的.dex文件。

這些新的.dex文件會通過Studio傳遞發(fā)布給應(yīng)用中運行的App Server。每次一個方法被調(diào)用時(不管在應(yīng)用中的任何地方),被注入到最初的class文件中的instrumentation都講去連接App Server來檢查它們是否有更新了。 如果有更新,執(zhí)行操作將被指派到新的充在的class文件,這樣就會執(zhí)行新修改的方法。

暖修復(fù)

冷修復(fù)

需要依賴Android Runtime能支持加載多個.dex文件,這是一個在ART中新增的功能,它只有在Android 5.0(API 21)以上的設(shè)備總才支持。

對于API 20一下的設(shè)備,他們?nèi)栽谑褂肈alvik虛擬機,Android Studio需要部署整個APK。

修復(fù)類型

熱修復(fù): 更改的內(nèi)容不需要重啟應(yīng)用甚至不需要重啟當前的activity就可以讓顯示內(nèi)容的改變,對于大部分通過方法內(nèi)容改變的更改都可以通過這種方式來修改。

暖修復(fù): 需要重啟activity才能讓改變生效,在改變資源時會通過該方式。

冷修復(fù): 應(yīng)用需要重啟(不是重新安裝)。對于一些方法方法結(jié)構(gòu)和實現(xiàn)等結(jié)構(gòu)性的改變需要通過該方式。

參考博文:

Instant Run詳解

Android InstantRun原理以及源碼分析

最后編輯于
?著作權(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)容

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