在 Android Studio 3.5 及更高版本中,Apply Changes 可讓您將代碼和資源更改推送到正在運行的應用,而無需重啟應用(在某些情況下,無需重啟當前 Activity)。有了這種靈活性,您就可以控制在想部署和測試細微增量更改時應用的重啟範圍,同時保持設備的當前狀態。Apply Changes 使用搭載 Android 8.0(API 級別 26)或更高版本的設備上支持的浪Android JVMTI 實現中的功能。如需詳細了解 Apply Changes 的工作原理,請參閱 Android Studio Project Marble:Apply Changes。
要求
Apply Changes 操作僅在滿足以下條件時可用:
- 您使用調試編譯變體來編譯應用的 APK。
- 您將應用部署到搭載 Android 8.0(API 級別 26)或更高版本的目標設備或模擬器上。
使用 Apply Changes
如果要將更改部署到兼容設備,請使用以下選項:
「Apply Changes and Restart Activity」圖標
嘗試通過重啟 Activity 但不重啟應用來應用資源和代碼更改。通常,如果您修改了方法正文中的代碼或修改了現有資源,則可以使用此選項。
您也可以按 Ctrl+Alt+F10(或者,在 macOS 上,按 Control+Shift+Command+R)來執行此操作。
「Apply Code Changes」圖標
嘗試僅應用代碼更改而不重啟任何內容。通常,如果您修改了方法正文中的代碼,但沒有修改任何資源,則可以使用此選項。如果您既修改了代碼,又修改了資源,則應該用 Apply Changes and Restart Activity。
您也可以按 Ctrl+F10(或者,在 macOS 上,按 Control+Command+R)來執行此操作。
「Run」圖標
部署所有更改並重啟應用。如果使用任一 Apply Changes 選項都無法應用您所做的更改,請使用此選項。要詳細了解需要重啟應用的更改類型,請參閱 Apply Changes 的限制。
為 Apply Changes 啟用 Run 回退機制
請您點擊 Apply Changes and Restart Activity 或 Apply Code Changes 後,Android Studio 會構建新 APK 並確定是否可以應用更改。如果無法應用更改並且會導致 Apply Changes 失敗,則 Android Studio 會改為提示您重新運行您的應用(通過點擊「Run」圖標
)。不過,如果您不想在每次發生這種情況時都收到提示,則可以將 Android Studio 配置為在無法應用更改時自動重新運行您的應用。
要啟用此行為,請按以下步驟操作:
- 打開 Settings 或 Preferences 對話框:在 Windows 或 Linux 上,從菜單欄中依次選擇 File > Settings。在 macOS 上,從菜單欄中依次選擇 Android Studio > Preferences。
- 依次轉到 Build, Execution, Deployment > Deployment。
- 選中複選框以針對任一 Apply Changes 操作啟用自動 Run fallback。
- 點擊 OK。
注意:某些類型的更改不會導致 Apply Changes 失敗,但仍然要求您手動重啟應用,然後才能看到這些更改。例如,如果您更改了某個 Activity 的 onCreate() 方法,則只有在該 Activity 重新啟動後,這些更改才會生效,因此您必須重啟應用才能看到這些更改。
Apply Changes 的限制
Apply Changes 旨在加快應用部署流程。不過,它的使用時機存在一些限制。如果您在使用 Apply Changes 時遇到任何問題,請提交錯誤。
需要重啟應用的代碼更改
某些代碼和資源更改必須在重啟應用之後才能應用,其中包括以下更改:
- 添加或刪除方法或欄位
- 更改方法簽名
- 更改方法或類的修飾符
- 更改類繼承行為
- 更改枚舉中的值
- 添加或移除資源
- 更改應用清單
- 更改原生庫(SO 文件)
庫和插件
某些庫和插件會自動更改應用的清單文件或清單中引用的資源。這些自動更新可能會通過以下方式干擾 Apply Changes:
- 如果庫或插件更改應用的清單,您不能使用 Apply Code Changes 圖標 或 Apply Changes and Restart Activity 圖標 ,而必須重啟應用,然後才能看到相應更改。
- 如果庫或插件更改應用的資源文件,您不能使用 Apply Code Changes 圖標 ,而必須使用 Apply Changes and Restart Activity 圖標 來查看相應更改。
您可以通過為調試構建變體停用所有自動更新來避免這些限制。
例如,Crashlytics 在每次構建過程中使用唯一的構建 ID 更新應用資源,這會阻止您使用 Apply Code Changes 圖標
,並要求您重啟應用的 Activity 才能看到相應更改。您可以停用此行為,以便能將 Apply Code Changes 與 Crashlytics 一起用於調試 build。
直接引用已安裝 APK 中的內容的代碼
如果您的代碼直接引用已在設備上安裝的應用 APK 中的內容,在您點擊了Apply Code Changes 圖標
後,該代碼可能會導致崩潰或出現異常。發生此行為的原因是,當您點擊 Apply Code Changes 時,設備上的底層 APK 會在安裝過程中被替換。在這些情況下,您可以改為點擊 Apply Changes and Restart Activity 圖標 或 Run 圖標 。