構(gòu)建流程
構(gòu)建流程涉及許多將項(xiàng)目轉(zhuǎn)換成 Android 應(yīng)用軟件包 (APK) 的工具和流程。構(gòu)建流程非常靈活,因此了解它的一些底層工作原理會(huì)很有幫助。

圖 1. 典型 Android 應(yīng)用模塊的構(gòu)建流程。
典型 Android 應(yīng)用模塊的構(gòu)建流程(如圖 1 所示)按照以下常規(guī)步驟執(zhí)行:
- 編譯器將您的源代碼轉(zhuǎn)換成 DEX 文件(Dalvik 可執(zhí)行文件,其中包括在 Android 設(shè)備上運(yùn)行的字節(jié)碼),并將其他所有內(nèi)容轉(zhuǎn)換成編譯后的資源。
- APK 打包器將 DEX 文件和編譯后的資源組合成單個(gè) APK。不過(guò),必須先為 APK 簽名,然后才能將應(yīng)用安裝并部署到 Android 設(shè)備上。
- APK 打包器使用調(diào)試或發(fā)布密鑰庫(kù)為 APK 簽名:
- 如果您構(gòu)建的是調(diào)試版應(yīng)用(即專用于測(cè)試和分析的應(yīng)用),則打包器會(huì)使用調(diào)試密鑰庫(kù)為應(yīng)用簽名。Android Studio 會(huì)自動(dòng)使用調(diào)試密鑰庫(kù)配置新項(xiàng)目。
- 如果您構(gòu)建的是打算對(duì)外發(fā)布的發(fā)布版應(yīng)用,則打包器會(huì)使用發(fā)布密鑰庫(kù)為應(yīng)用簽名。如需創(chuàng)建發(fā)布密鑰庫(kù),請(qǐng)參閱在 Android Studio 中為應(yīng)用簽名。
- 在生成最終 APK 之前,打包器會(huì)使用 zipalign 工具對(duì)應(yīng)用進(jìn)行優(yōu)化,以減少其在設(shè)備上運(yùn)行時(shí)所占用的內(nèi)存。
構(gòu)建流程結(jié)束時(shí),您將獲得應(yīng)用的調(diào)試版 APK 或發(fā)布版 APK,以用于部署、測(cè)試或發(fā)布給外部用戶。
自定義構(gòu)建配置
Gradle 和 Android 插件可幫助您完成以下方面的構(gòu)建配置:
構(gòu)建類型
構(gòu)建類型定義 Gradle 在構(gòu)建和打包應(yīng)用時(shí)使用的某些屬性,通常針對(duì)開(kāi)發(fā)生命周期的不同階段進(jìn)行配置。例如,調(diào)試構(gòu)建類型支持調(diào)試選項(xiàng),并使用調(diào)試密鑰為 APK 簽名;而發(fā)布構(gòu)建類型則會(huì)縮減 APK、對(duì) APK 進(jìn)行混淆處理,并使用發(fā)布密鑰為 APK 簽名以進(jìn)行分發(fā)。如需構(gòu)建應(yīng)用,您必須至少定義一個(gè)構(gòu)建類型。Android Studio 默認(rèn)會(huì)創(chuàng)建調(diào)試和發(fā)布兩個(gè)構(gòu)建類型。如需開(kāi)始為應(yīng)用自定義打包設(shè)置,請(qǐng)了解如何 配置構(gòu)建類型。
產(chǎn)品變種
產(chǎn)品變種代表您可以向用戶發(fā)布的應(yīng)用的不同版本,如應(yīng)用的免費(fèi)版和付費(fèi)版。您可以自定義產(chǎn)品變種以使用不同的代碼和資源,同時(shí)共享和重復(fù)利用所有應(yīng)用版本共用的部分。產(chǎn)品變種是可選的,您必須手動(dòng)創(chuàng)建。如需開(kāi)始創(chuàng)建應(yīng)用的不同版本,請(qǐng)了解如何配置產(chǎn)品變種。。
構(gòu)建變體
構(gòu)建變體是構(gòu)建類型與產(chǎn)品變種的交叉產(chǎn)物,也是 Gradle 用來(lái)構(gòu)建應(yīng)用的配置。利用構(gòu)建變體,您可以在開(kāi)發(fā)期間構(gòu)建產(chǎn)品變種的調(diào)試版本,或者構(gòu)建產(chǎn)品變種的已簽名發(fā)布版本以供分發(fā)。雖然您無(wú)法直接配置構(gòu)建變體,但可以配置組成它們的構(gòu)建類型和產(chǎn)品變種。創(chuàng)建額外的構(gòu)建類型或產(chǎn)品變種也會(huì)創(chuàng)建額外的構(gòu)建變體。如需了解如何創(chuàng)建和管理構(gòu)建變體,請(qǐng)參閱配置構(gòu)建變體。。
清單條目
您可以在構(gòu)建變體配置中為清單文件的某些屬性指定值。這些構(gòu)建值會(huì)替換清單文件中的現(xiàn)有值。如果您要為模塊生成多個(gè) APK,讓每一個(gè) APK 文件都具有不同的應(yīng)用名稱、最低 SDK 版本或目標(biāo) SDK 版本,便可運(yùn)用這一技巧。當(dāng)存在多個(gè)清單時(shí),Gradle 會(huì)合并清單設(shè)置。
依賴項(xiàng)
構(gòu)建系統(tǒng)會(huì)管理來(lái)自本地文件系統(tǒng)以及來(lái)自遠(yuǎn)程代碼庫(kù)的項(xiàng)目依賴項(xiàng)。這樣一來(lái),您就不必手動(dòng)搜索、下載依賴項(xiàng)的二進(jìn)制文件包以及將它們復(fù)制到項(xiàng)目目錄中。如需了解詳情,請(qǐng)參閱添加構(gòu)建依賴項(xiàng)。
簽名
構(gòu)建系統(tǒng)讓您能夠在構(gòu)建配置中指定簽名設(shè)置,并且可以在構(gòu)建過(guò)程中自動(dòng)為 APK 簽名。構(gòu)建系統(tǒng)通過(guò)已知憑據(jù)使用默認(rèn)密鑰和證書(shū)為調(diào)試版本簽名,以避免在構(gòu)建時(shí)提示輸入密碼。除非您為此構(gòu)建明確定義簽名配置,否則,構(gòu)建系統(tǒng)不會(huì)為發(fā)布版本簽名。如果您沒(méi)有發(fā)布密鑰,可以按為應(yīng)用簽名中所述生成一個(gè)。
代碼和資源縮減
構(gòu)建系統(tǒng)讓您能夠?yàn)槊總€(gè)構(gòu)建變體指定不同的 ProGuard 規(guī)則文件。在構(gòu)建應(yīng)用時(shí),構(gòu)建系統(tǒng)會(huì)應(yīng)用一組適當(dāng)?shù)囊?guī)則以使用其內(nèi)置的縮減工具(如 R8)縮減您的代碼和資源。
多 APK 支持
構(gòu)建系統(tǒng)讓您能夠自動(dòng)構(gòu)建不同的 APK,并且每個(gè) APK 只包含特定屏幕密度或應(yīng)用二進(jìn)制接口 (ABI) 所需的代碼和資源。如需了解詳情,請(qǐng)參閱構(gòu)建多個(gè) APK。