建立並執行應用程式

Android Studio 會設定要部署至 Android Emulator 或已連線裝置的新專案。應用程式安裝完畢後,您可以使用套用變更功能來部署特定程式碼和資源變更,每次執行時都無需部署新的 APK。

如要建構並執行應用程式,請按照下列步驟操作:

  1. 在工具列中,從執行設定下拉式選單選取您的應用程式。
  2. 在目標裝置下拉式選單中,選取要執行應用程式的裝置。

    目標裝置下拉式選單。

    如果您未設定任何裝置,就必須連接裝置建立 AVD,才能使用 Android Emulator

  3. 按一下「Run」(執行)

如果您嘗試將專案啟動至有相關錯誤或警告的裝置,Android Studio 會顯示警告。圖示和樣式變更區分為「錯誤」(所選裝置會造成裝置設定無效) 與「警告」(所選裝置可能導致意外行為,但仍可繼續執行)。

變更執行/偵錯設定

首次執行應用程式時,Android Studio 會使用預設的執行設定。執行設定會指定下列項目:是否要從 APK、Android App Bundle 或自訂成果部署應用程式;要執行的模組;要部署的套件、活動;目標裝置;模擬器設定;logcat 選項;還有其他許多功能。

如果預設設定不適用於您的專案或模組,您可以自訂執行/偵錯設定,甚至在專案、預設和模組層級中建立新設定。如要編輯執行/偵錯設定,請依序選取「Run」(執行) >「Edit Configurations」(編輯設定)。詳情請參閱「建立及編輯執行/偵錯設定」。

變更建構變數

根據預設,在點選「Run」(執行) 後,Android Studio 會建構應用程式的偵錯版本,不過這只能在開發期間使用。

如要變更 Android Studio 使用的建構變數,請在選單列中依序選取「Build」(建構) >「Select Build Variant」(選擇建構變數)

如果專案沒有原生/C++ 程式碼,「Build Variants」(建構變數) 面板會有兩個資料欄:ModuleActive Build Variant。模組的「Active Build Variant」(使用中的建構變數) 值會決定 IDE 部署至連線裝置的建構變數,並且顯示在編輯器中。

圖 1. 「Build Variants」(建構變數) 面板會為沒有原生/C++ 程式碼的專案提供兩個資料欄

如要切換建構變數,請針對模組按一下「Active Build Variant」(使用中的建構變數) 儲存格,然後從清單欄位中選擇所需的變數。

如果專案具有原生/C++ 程式碼,「Build Variants」(建構變數) 面板會包含三個資料欄:「Module」(模組)、「Active Build Variant」(使用中的建構變數) 和「Active ABI」(使用中的 ABI)。模組的「Active Build Variant」(使用中的建構變數) 值會決定 IDE 部署至裝置的建構變數,並且顯示在編輯器中。以原生模組來說,Active ABI 值會決定編輯器使用的 ABI,但不會影響部署的內容。

圖 2. 「Build Variants」(建構變數) 面板會為使用原生 /C++ 程式碼的專案新增「Active ABI」(使用中的 ABI) 資料欄

如要變更建構變數或 ABI,請按一下「Active Build Variant」(使用中的建構變數) 或「Active ABI」(使用中的 ABI) 資料欄的儲存格,然後從清單中選擇所需的變數或 ABI。在您變更選項之後,IDE 會自動同步處理專案。變更應用程式或資料庫模組的任一資料欄後,該變更會套用至所有相依資料列。

根據預設,新專案設定有兩個偵錯版本:偵錯和發布版本。您必須建立發布版本,為公開發布應用程式做好準備

如要建構應用程式的其他變化版本,且每個版本有不同的功能或裝置需求,您可以定義其他建構變數

Android Studio 的「Build Variants」(建構變數) 對話方塊中的衝突

Android Studio 的「Build Variants」(建構變數) 對話方塊可能會顯示錯誤訊息,指出建構變數之間的衝突,如下所示:

「Build Variant」(建構變數) 視窗顯示變數衝突錯誤

這個錯誤並不代表 Gradle 有建構問題,只代表 Android Studio IDE 本身無法解析所選模組變化版本之間的符號。

舉例來說,如果您的模組 M1 依附於 M2 模組的 v1 變化版本,但 M2 已在 IDE 中選取 v2 變化版本,IDE 中就會有未解析的符號。假設 M1 依附於 Foo 類別,而該類別僅適用於 v1。如果選取 v2,IDE 將無法識別該類別也無法解析,且會在 M1 程式碼中顯示錯誤。

IDE 無法同時載入多個變化版本的程式碼,因此系統會顯示這些錯誤訊息。不過,就您應用程式的建構作業而言,在這個對話方塊中所選的變化版本不會受到任何影響,因為 Gradle 在建構應用程式時,使用的是 Gradle 建構作業方案中指定的原始碼,而非 IDE 目前載入的項目。

建置您的專案

按一下「Run」(執行) 按鈕 ,即可將應用程式部署至裝置。不過,如要建構應用程式來分享或上傳至 Google Play,您必須使用「Build」(建構) 選單中的其中一個選項來編譯部分或全部的專案。選取資料表 1 中列出的任何建構選項之前,請務必先選取要使用的建構變數

表 1. 建構選項:

選單項目 說明
製作模組 為所選模組中的所有原始碼檔案,編譯自上次建構後修改過的檔案,且所選模組的所有模組皆須遞迴。編譯包含相依來源檔案和任何相關聯的建構工作。您可以在「Project」(專案) 視窗中選取模組名稱或其中一個檔案,選取要建構的模組。
「Make Project」(製作專案) 建立所有模組。
「Clean Project」(清理專案) 刪除所有中繼/快取的建構檔案。
「Rebuild Project」(重新建構專案) 針對所選的建構變數執行「Clean Project」(清理專案),然後產生 APK。
「Build Bundle(s) / APK(s)」(建構套件/APK) >「Build APK(s)」(建構 APK)

在目前專案中為所選變化版本建構所有模組的 APK。建構完成後,系統會顯示確認通知,並提供 APK 檔案連結以及用於在 APK 分析工具中分析該檔案的連結。

如果您選取的建構變數為偵錯版本類型,系統會使用偵錯金鑰簽署 APK,然後您就可以安裝該 APK。如果您已選取發布版本,APK 會預設為未簽署狀態,這時您必須手動簽署 APK。您也可以從選單列中依序選取「Build」(建構) >「Generate Signed Bundle / APK」(產生簽署套件 / APK)

Android Studio 會儲存您在 project-name/module-name/build/outputs/apk/ 中建立的 APK。

「Build Bundle(s) / APK(s)」(建構套件/APK)) >「Build Bundle(s)」(建構套件)

在目前專案中為所選變化版本建構所有模組的 Android App Bundle。建構完成後,系統會顯示確認通知,並提供應用程式套件的連結,以及用於在 APK 分析工具中分析該套件的連結。

如果您選取的建構變數為偵錯版本類型,系統會使用偵錯金鑰簽署應用程式套件,然後您就能使用 bundletool 透過該套件將應用程式部署至已連結的裝置。如果您已選取發布版本,應用程式套件會預設為未簽署狀態,這時您必須使用 jarsigner 手動簽署。您也可以從選單列中依序選取「Build」(建構) >「Generate Signed Bundle / APK」(產生簽署套件 / APK)

Android Studio 會儲存您在 project-name/module-name/build/outputs/bundle/ 中建立的 APK。

「Generate Signed Bundle / APK」(產生簽署套件 / APK) 利用精靈啟動對話方塊,以建立新的簽署設定,並建構已簽署的應用程式套件或 APK。您必須使用發布金鑰簽署應用程式,才能將其上傳至 Play 管理中心。如要進一步瞭解應用程式簽署,請參閱「簽署應用程式」。

注意:點選「Run」(執行) 按鈕 後,系統會隨即建立含有 testOnly="true" 設定的 APK,代表該 APK 只能透過 Android Studio 使用的 adb 安裝。如要取得無需 ADB 即可安裝的可偵錯 APK,請選取偵錯變化版本,然後依序點選「Build Bundle(s) / APK(s)」(建構套件/APK) >「Build APK(s)」(建構 APK)

如要進一步瞭解 Gradle 為每個指令執行的工作,請按照下節說明開啟「Build」(建構) 視窗。如要進一步瞭解 Gradle 和建構程序,請參閱「設定建構」。

監控建構程序

如要查看建構程序的詳細資料,請依序按一下「View」(檢視) >「Tool Windows」(工具視窗) >「Build」(建構),或按一下工具列中的「Build」(建構) 。該視窗會顯示 Gradle 執行的工作,以建構您的應用程式。如圖 3 所示。

圖 3. Android Studio 中的「Build output」(建構輸出) 視窗

  1. 「Build」(建構) 分頁:顯示 Gradle 執行的工作 (以樹狀結構表示),其中每個節點代表建構階段或一組工作依附元件。如果您收到建構時間或編譯時間錯誤,請檢查樹狀結構並選取某個元素來讀取錯誤輸出內容,如圖 4 所示。

    圖 4. 檢查建構輸出內容視窗,查看錯誤訊息

  2. Sync (同步) 分頁:顯示 Gradle 執行的工作,可與專案檔案保持同步。與「Build」(建構) 分頁類似,如果您遇到同步處理錯誤,請在樹狀結構中選取元素以瞭解該項錯誤的詳情。
  3. 重新啟動:與依序選取「Build」(建構) >「Make Project」(製作專案) 執行相同的動作,會為專案中所有模組產生中繼建構檔案。
  4. 切換檢視模式:可切換以樹狀結構圖顯示工作執行情形,或顯示 Gradle 產生的詳細文字輸出內容 (與在 Android Studio 3.0 以下版本的「Gradle Console」(Gradle 主控台) 視窗 中顯示的輸出內容相同)。

如果您的建構變數採用變種版本,Gradle 也會叫用工作來建構這些變種版本。如要查看所有可用的建構工作清單,請依序點選「View」(檢視) >「Tool Windows」(工具視窗) >「Gradle」,或按一下工具視窗列中的「Gradle」圖示

如果建構過程發生錯誤,Gradle 可能會推薦某些指令列選項來解決問題,例如 --stacktrace--debug。如要搭配建構程序使用指令列選項:

  1. 開啟「Settings」(設定) 或「Preferences」(偏好設定) 對話方塊:
    • 在 Windows 或 Linux 上,從選單列中依序選取「File」(檔案) >「Settings」(設定)
    • 在 Mac OSX 上,從選單列中依序選取「Android Studio」>「Preferences」(偏好設定)
  2. 依序前往「Build, Execution, Deployment」(建構、執行、部署) >「Compiler」(編譯器)
  3. 在「Command-line Options」(指令列選項) 旁邊的文字欄位中,輸入指令列選項。
  4. 按一下「OK」(確定) 即可儲存並結束。

Gradle 會在您下次嘗試建構應用程式時套用這些指令列選項。

即時編輯 (實驗功能)

「即時編輯」是 Android Studio Electric Eel 初期測試版本中的實驗性功能,可讓您即時更新模擬器和實體裝置上的組件。更新可組合函式時,您所做的變更會套用至裝置或模擬器中。這項功能可減少在編寫及建構應用程式之間切換檢視畫面,讓您長時間專注於編寫程式碼,不會受到干擾。

即時編輯功能著重於與使用者介面和使用者體驗相關的程式碼變更。不支援更新方法簽章、新增方法或變更類別階層等異動項目。詳情請參閱「限制」一節。

這項功能無法做為建構及執行應用程式或套用變更功能的替代方法。其主要用途是對 Compose 使用者介面開發過程中的建構、部署及疊代工作流程進行最佳化。

最佳工作流程如下:

  1. 設定讓應用程式順利執行。
  2. 盡可能使用即時編輯功能,除非您需要進行這項功能不支援的變更 (例如在應用程式執行期間新增方法)。
  3. 在完成不支援的變更後執行應用程式,即可恢復即時編輯功能。

這張 GIF 圖片展示了如何使用即時編輯功能來更新裝置上執行的應用程式

圖 5每次進行即時編輯功能支援的變更時,裝置或模擬器上執行的應用程式都會即時更新。

開始使用即時編輯功能

想要馬上使用這項功能嗎?請按照下列步驟建立空白的 Compose 活動、為專案啟用即時編輯功能,並透過即時編輯功能進行變更。

設定新專案

  1. 在開始之前,確認您已安裝最新初期測試版本的 Android Studio Electric Eel,且實體裝置或模擬器的 API 級別至少為 30。

  2. 開啟 Android Studio,並在「Welcome to Android Studio」(歡迎使用 Android Studio)彈出式視窗中選取「New Project」(新專案)。如果您已開啟專案,只要依序前往「File」(檔案) >「New」(新增) >「New Project」(新專案) 即可建立新專案。

  3. 針對「Phone and Tablet」(手機和平板電腦),選擇「Empty Compose Activity」(空白 Compose 活動) 範本,然後按一下「Next」(下一步)

    在 Android Studio 中選取範本圖 6:可供選擇的範本。為即時編輯功能選擇「Empty Compose Activity」(空白 Compose 活動)

  4. 輸入以下內容,然後按一下「Finish」(完成)

    • 「Name」(名稱)HelloWorld
    • 「Package name」(套件名稱)com.example.helloworld
    • 「Save location」(儲存位置):預設
    • 「Language」(語言)Kotlin
    • 「Minimum SDK」(最低 SDK):保留預設值

    在 Android Studio 中輸入步驟 4 的專案設定範例圖 7專案設定範例。

啟用即時編輯功能

  1. 在 IDE 中前往設定,啟用即時編輯功能。

    • 在 Windows 或 Linux 上,依序前往「File」(檔案) >「Settings」(設定) >「Editor」(編輯器) >「Live Edit」(即時編輯)
    • 在 macOS 上,依序前往「Android Studio」>「Preferences」(偏好設定) >「Editor」(編輯器) >「Live Edit」(即時編輯)

    Android Studio 設定中的「Live Edit」(即時編輯) 核取方塊使用者介面圖 8:從設定中選取「Live Edit」(即時編輯) 選項。

  2. 在編輯器中開啟 MainActivity 檔案,這是應用程式的進入點。

  3. 按一下「Run」(執行) 圖示 使用者介面按鈕 來部署應用程式,然後在編輯器右上方按一下「Split」(分割),即可開啟預覽畫面。

  4. 開啟即時編輯功能後,編輯器右上角應會顯示「Live Edit」的綠色勾號。

    即時編輯功能的綠色勾號使用者介面

    圖 9. 開啟即時編輯功能後,系統會顯示綠色勾號和「Live Edit」(即時編輯) 下拉式選單箭頭。

進行變更並檢查變更結果

在編輯器中,將 MainActivity 中現有的 Greeting 方法變更為以下內容。您的變更會立即顯示,如圖 10 所示。

@Composable
fun Greeting(name: String) {
    Text(text = "Hello $name!",
        Modifier.padding(80.dp) // Outer padding; outside background
            .background(color = Color.Cyan) // Solid element background color
            .padding(16.dp) // Inner padding; inside background, around text)
    )
}

套用至裝置的 Greeting 方法變更內容

圖 10. 您使用即時編輯功能對上述 Greeting 方法進行的變更內容會立即顯示。

疑難排解

如果預覽窗格中沒有顯示編輯內容,表示 Android Studio 可能無法更新編輯內容。確認「Live Edit」(即時編輯) 使用者介面的指標是否顯示暫停圖示,這代表有編譯錯誤。

即時編輯狀態使用者介面

圖 11. 如要進一步瞭解該錯誤與解決錯誤的建議,請將游標懸停在使用者介面的「Live Edit: ON」(即時編輯:開啟) 上。

限制

目前的限制清單如下。

  • 即時編輯功能僅適用於搭載 API 級別 30 以上的實體裝置或模擬器。
  • 即時編輯功能僅支援編輯函式主體,代表您無法變更函式名稱或簽章、新增或移除函式,或是變更非函式欄位。
  • 透過即時編輯功能修改過的類別可能會對效能產生負面影響。如要評估應用程式效能,建議您使用簡潔的發布子版本執行應用程式。
  • 您必須進行完整的執行作業,才能讓偵錯工具對透過即時編輯功能修改過的類別執行偵錯。
  • 假如您透過即時編輯功能編輯執行中的應用程式,可能會導致應用程式當機。如果發生這種情況,您可以用「Run」(執行) 使用者介面按鈕 按鈕重新部署應用程式。
  • 即時編輯功能不會執行您在專案建構檔案中定義的任何位元碼操控設定,例如使用「Build」(建構) 選單中的選項、或點選「Build」(建構) 或「Run」(執行) 按鈕時,會在建構專案時套用的位元碼操控設定。
  • 非可組合函式會在裝置或模擬器上即時更新,並觸發完整重組功能。完整重組功能可能不會叫用已更新的函式。對於非可組合函式,則您必須觸發新更新的函式或再次執行應用程式。
  • 應用程式重新啟動後,系統不會一併恢復即時編輯功能,因此您必須再次執行應用程式。

常見問題

  • 即時編輯功能目前處於什麼狀態?
    • Android Studio Electric Eel 初期測試版本提供的「即時編輯」仍為實驗性功能。如要開啟或關閉這項功能,請依序前往「File」(檔案) >「Settings」(設定) >「Editor」(編輯器) >「Live Edit」(即時編輯) 。在 macOS 上為「Android Studio」>「Preferences」(偏好設定) >「Editor」(編輯器) >「Live Edit」(即時編輯)
  • 何時該使用即時編輯功能?
    • 當您要快速查看使用者體驗元素更新 (例如修飾符更新、動畫) 對整體應用程式體驗的影響時,就可以使用即時編輯功能。
  • 何時該避免使用即時編輯功能?
    • 即時編輯功能目前著重於與使用者介面和使用者體驗相關的程式碼變更,但不支援更新方法簽章、新增方法或變更類別階層等相關異動,因此請避免在這些情況下使用這項功能。詳情請參閱「限制」一節。
  • 何時該使用 Compose 預覽?
    • 開發個別可組合項時,就可以使用 Compose 預覽功能。預覽功能會以視覺化的方式呈現 Compose 元素,並自動重新整理,以顯示程式碼變更的效果。此外,預覽功能也能讓您查看不同設定和狀態下的 UI 元素 (例如深色模式、語言代碼、字型大小)。

套用變更

在 Android Studio 3.5 以上版本中,套用變更功能可讓您將程式碼和資源變更推送到執行中的應用程式,無需重新啟動應用程式。在某些情況下,也無需重新啟動目前的活動。如要部署及執行小幅增量的變更,同時保留裝置目前的狀態,就能透過這項彈性功能控制應用程式的重新啟動範圍。套用變更功能會使用 Android JVMTI 實作中的各項功能 (搭載 Android 8.0 (API 級別 26) 以上版本的裝置支援這些功能)。如要進一步瞭解套用變更的運作方式,請參閱 Android Studio 專案適用性:套用變更

相關規定

您必須符合下列條件,才能使用變更變更動作:

  • 您可使用偵錯建構變數來建構應用程式的 APK。
  • 將應用程式部署至搭載 Android 8.0 (API 級別 26) 以上版本的目標裝置或模擬器。

使用套用變更

如果您要將變更部署至相容裝置,請使用下列選項:

套用變更並重新啟動活動 套用變更並重新啟動活動圖示

嘗試重新啟動活動但不重新啟動應用程式,藉此套用資源和程式碼變更。一般來說,如果您已修改方法主體中的程式碼或修改現有資源,就可以使用這個選項。

您也可以按下 Ctrl+Alt+F10 (或 macOS 上的 Control+Shift+Command+R) 來執行這項操作。

套用代碼變更 套用程式碼變更圖示

會嘗試僅套用程式碼變更,而不重新啟動任何項目。一般來說,如果您已修改方法主體中的程式碼,但未修改任何資源,就可以使用這個選項。如果您已同時修改程式碼和資源,請改用「Apply Changes and Restart Activity」(套用變更及重新啟動活動)。

您也可以按下 Ctrl+F10 (或 macOS 上的 Control+Command+R) 來執行這項操作。

Run 圖示跑步

部署所有變更並重新啟動應用程式。如果您無法透過「套用變更」選項套用您所做的變更,就可以使用這個選項。如要進一步瞭解哪些需要重新啟動應用程式的變更類型,請參閱套用變更的限制

為套用變更啟用執行備用廣告

點選「Apply Changes and Restart Activity」或「Apply Code Changes」後,Android Studio 會建構新的 APK 並判斷是否可套用變更。如果無法套用變更,導致套用變更失敗,Android Studio 會提示您再次執行 Run 圖示 應用程式。不過,如果您不想在每次發生這種情形時收到這個提示,可將 Android Studio 設定為在無法套用變更時自動重新執行應用程式。

如要啟用這項行為,請按照下列步驟操作:

  1. 開啟「Settings」或「Preferences」對話方塊:

    • 在 Windows 或 Linux 上,從選單列中依序選取「File」(檔案) >「Settings」(設定)
    • 在 macOS 選單中,從選單列中依序選取「Android Studio」>「Preferences」(偏好設定)
  2. 依序前往「Build, Execution, Deployment」(建構、執行、部署) >「Deployment」(部署)

  3. 選取核取方塊來為其中一個「套用變更」動作啟用自動執行備用廣告功能。

  4. 按一下「OK」(確認)

因平台而異

「套用變更」的某些功能取決於特定 Android 平台版本。如要套用這類變更,您的應用程式必須部署至執行該 Android 或以上版本的裝置。

變更類型 最低平台版本
新增方法 Android 11

套用變更的限制

「套用變更」旨在加快應用程式部署程序。不過,使用時機有一些限制。如果您在使用套用變更時遇到任何問題,請回報錯誤

需要重新啟動應用程式的程式碼變更

應用程式重新啟動後,才能套用某些程式碼和資源變更,包括:

  • 新增或移除欄位
  • 移除方法
  • 變更方法簽章
  • 變更方法或類別的修飾符
  • 變更類別沿用設定
  • 變更列舉中的值
  • 新增或移除資源
  • 變更應用程式資訊清單
  • 變更原生資料庫 (SO 檔案)

程式庫與外掛程式

有些程式庫和外掛程式會自動變更應用程式的資訊清單檔案或資訊清單中參照的資源。這些自動更新會干擾套用變更,原因如下:

  • 如果程式庫或外掛程式變更應用程式的資訊清單,您就無法使用「Apply Code Changes」(套用程式碼變更) 圖示 套用程式碼變更圖示 或「Apply Changes and Restart Activity」(套用變更並重新啟動活動)圖示 套用變更並重新啟動活動圖示,而是必須重新啟動應用程式才能看到變更。
  • 如果程式庫或外掛程式變更應用程式的資源檔案,則無法使用「Apply Code Changes」(套用程式碼變更)圖示 套用程式碼變更圖示,而是必須使用「Apply Changes and Restart Activity」(套用變更並重新啟動活動) 圖示 套用變更並重新啟動活動圖示 才能看到變更。

如要避免受到這些限制影響,您可以停用偵錯建構變數的所有自動更新。

舉例來說,Crashlytics 在每次建構過程中會使用不重複的建構 ID 來更新應用程式資源,進而讓您無法使用「Apply Code Changes」(套用程式碼變更) 圖示 套用程式碼變更圖示,因此您必須重新啟動應用程式的活動才能看到變更。您可以停用這類行為,以便將「Apply Code Changes」(套用程式碼變更) 與 Crashlytics 一起用來處理偵錯版本。

直接參照已安裝 APK 內容的程式碼

如果您的程式碼會直接參照裝置上安裝的應用程式 APK 內容,在您點選「Apply Code Changes」(套用程式碼變更) 圖示 套用程式碼變更圖示 後,該程式碼可能當機或出現異常。發生這種行為的原因是,在點選「Apply Code Changes」(套用程式碼變更) 後,裝置上的基礎 APK 在安裝期間會遭到替換。在這類情況下,您可以改為點選「Apply Changes and Restart Activity」(套用變更並重新啟動活動) 圖示 套用變更並重新啟動活動圖示 或「Run」(執行) 圖示 Run 圖示