android構建系統總覽

Android構建系統是你用於構建,測試,運行及打包你的apps的工具包。構建系統既能夠做爲一個集成工具經過Android Studio的菜單運行,也能夠在命令行中獨立地運行。你可使用構建系統的功能來作這些事情: html

  • 定製,配置,及擴展構建過程
  • 使用相同的項目及模塊,爲你具備不一樣功能的app建立多個APKs。
  • 在源碼集合間複用代碼和資源。

Android構建系統的靈活性使得你可以在不改變你的app的核心源代碼文件的狀況下達成全部這些目標。要編譯一個Android Studio項目,請參考Building and Running from Android Studio。要對Android Studio項目配置特別的構建設置,請參考 Configuring Gradle Builds java

構建過程詳解

構建過程包含了在產生.apk的過程當中用到的許多工具及有中間文件產生的子過程。若是你在使用Android Studio作開發,則在你每次爲你的項目或模塊運行Gradle build task時,都會完成完整的構建過程。構建過程是很是靈活的,而因爲許多構建過程是可配置並可擴展的,於是理解構建過程背後都發生了什麼是頗有用的。下圖描述了包含在一次構建中的不一樣工具及過程: android


一次典型構建的常規過程大致以下。構建系統從配置的product flavors,build types,和dependencies合併全部的資源。若是不一樣目錄下包含的資源具備相同的名字或設定,則遵循的覆蓋優先級順序爲:dependencies覆蓋build types,build types覆蓋product flavors,product flavors覆蓋main source目錄: shell

  • Android Asset Packaging Tool (aapt)獲取你的應用程序的資源文件,好比AndroidManifest.xml文件及你的Activities的XML文件,並編譯它們。同時會產生R.java文件,以便於你能夠在你的Java代碼中引用你的資源。
  • aidl工具將你全部的.aidl接口轉換爲Java接口。
  • 你全部的Java代碼,包括R.java和.aidl文件,被Java編譯器編譯爲.class文件輸出。
  • dex工具將.class文件轉換爲Dalvik字節碼。你的模塊中包含的全部第3方庫及.class文件也會被轉換爲.dex文件,以便於它們能夠被打包進最後的.apk文件。
  • 全部沒有被編譯的資源(好比圖片),已編譯的資源,及.dex文件被髮送給apkbuilder工具來打包成一個.apk文件。
  • 一旦構建了.apk,則在它可以被安裝到一個設備以前必須用一個debug或release key來簽名。
  • 最後,若是應用以release模式簽名,則你必須用zipalign工具來align你的.apk。Aligning最後的.apk在應用程序運行於一個設備上時能夠下降內存的用量。

注意:Apps有一個限制,引用的method數被限制在64K之內。若是你的app達到了這個限制,構建過程將輸出以下的錯誤消息: app

Unable to execute dex: method ID not in [0, 0xffff]: 65536.

要避免這個錯誤,請參考Building Apps with Over 65K Methods ide

構建輸出

構建過程爲每次構建在app/build目錄下產生一個不一樣的APK:app/build/outputs/apk/目錄包含名爲app-<flavor>-<buildtype>.apk的包;好比app-full-release.apk和app-demo-debug.apk。 工具

Done 測試

原文
gradle

相關文章
相關標籤/搜索