android開發Apply Changes功能,無需重啟應用,快速運行

技術剛剛好 發佈 2020-06-29T14:33:00+00:00

在 Android Studio 3.5 及更高版本中,Apply Changes 可讓您將代碼和資源更改推送到正在運行的應用,而無需重啟應用(在某些情況下,無需重啟當前 Activity)。

在 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 ActivityApply Code Changes 後,Android Studio 會構建新 APK 並確定是否可以應用更改。如果無法應用更改並且會導致 Apply Changes 失敗,則 Android Studio 會改為提示您重新運行您的應用(通過點擊「Run」圖標

)。不過,如果您不想在每次發生這種情況時都收到提示,則可以將 Android Studio 配置為在無法應用更改時自動重新運行您的應用。

要啟用此行為,請按以下步驟操作:

  1. 打開 SettingsPreferences 對話框:在 Windows 或 Linux 上,從菜單欄中依次選擇 File > Settings。在 macOS 上,從菜單欄中依次選擇 Android Studio > Preferences
  2. 依次轉到 Build, Execution, Deployment > Deployment
  3. 選中複選框以針對任一 Apply Changes 操作啟用自動 Run fallback。
  4. 點擊 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 圖標 。


關鍵字: