Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android官方技術文檔翻譯——Gradle 插件用戶指南(7)

Android官方技術文檔翻譯——Gradle 插件用戶指南(7)

編輯:關於Android編程

 

高級構建定制

構建選項

Java 編譯選項

android { compileOptions { sourceCompatibility = 1.6 targetCompatibility = 1.6 } }
默認值為“1.6”。這個配置會影響所有編譯 Java 源代碼的任務。

aapt 選項

android { aaptOptions { noCompress 'foo', 'bar' ignoreAssetsPattern !.svn:!.git:!.ds_store:!*.scc:.*: _*:!CVS:!thumbs.db:!picasa.ini:!*~ } }

這個配置會影響所有使用aapt的任務。

dex 選項

android { dexOptions { incremental false
preDexLibraries = false
jumboMode = false
} }
這個配置會影響所有使用dex 的任務。

操作任務

基本的 Java 項目有一組有限的任務能夠共同協作來創建一個輸出。
其中classes 任務是將 Java 源代碼進行編譯的那個任務。
build.gradle通過簡單地在腳本中使用classes就能很容易地訪問它。這是project.tasks.classes的簡潔寫法。

在 Android 項目中,它會比較復雜一點,因為可能有大量的相同的任務並且他們的名字都是基於Build TypesProduct Flavors生成。

android對象中有兩個(譯者注:我怎麼感覺是三個。難道是原文筆誤?)屬性就是為解決這個問題的:
  • applicationVariants(僅適用於應用程序插件)
  • libraryVariants(僅適用於庫插件)
  • testVariants (對兩個插件都適用) 這三個會分別返回ApplicationVariant、LibraryVariant和TestVariant的DomainObjectCollection對象。

    注意,訪問這些集合的任何一個都將觸發所有任務的生成。這意味著在訪問這些集合之後不應該再進行(重新)配置。

    DomainObjectCollection可以對所有對象進行直接訪問,或通過過濾器(這將會很方便)過濾。

    android.applicationVariants.each { variant -> .... }

    這三個variant 類都有以下屬性:

    屬性名稱 屬性類型 描述 name String variant的名稱。必須保證是唯一的。 description String 人類可讀的對variant的描述。 dirName String variant的子文件夾名稱。必須保證是唯一的。可能會是多個文件夾,即debug/flavor1 baseName String variant的輸出的基礎名稱必須保證是唯一的。 outputFile File variant的輸出。這是一個可讀可寫的屬性 processManifest ProcessManifest 處理manifest的任務。 aidlCompile AidlCompile 編譯AIDL文件的任務。 renderscriptCompile RenderscriptCompile 編譯Renderscript文件的任務。 mergeResources MergeResources 合並資源的任務。 mergeAssets MergeAssets 合並assets的任務。 processResources ProcessAndroidResources 處理和編譯資源的任務。 generateBuildConfig GenerateBuildConfig 生成 BuildConfig 類的任務。 javaCompile JavaCompile 編譯 Java 代碼的任務。 processJavaResources Copy 處理 Java 資源的任務。 assemble DefaultTask variant 的assemble錨任務。
    ApplicationVariant 類增加了以下屬性:

    屬性名稱 屬性類型 描述 buildType BuildType variant 的 BuildType。 productFlavors List variant 的 ProductFlavors。總是不為null,但可以是空集合。 mergedFlavor ProductFlavor 對android.defaultConfig 和 variant.productFlavors的合並 signingConfig SigningConfig 用於 variant 的 SigningConfig 對象 isSigningReady boolean 如果該 variant 有簽名所需的所有信息則為true。 testVariant BuildVariant 將會測試該variant的TestVariant dex Dex 將代碼生成dex的任務。如果variant是一個庫,這個值可以為 null。 packageApplication PackageApplication 打包最終的APK的任務。如果variant是一個庫,這個值可以為 null。 zipAlign ZipAlign 對apk進行zipaligns(優化對齊)的任務。如果variant是一個庫或者APK不能被簽名,這個值可以為 null。 install DefaultTask 安裝任務。可以為 null。 uninstall DefaultTask 卸載任務。
    LibraryVariant 類增加了以下屬性:

    屬性名稱 屬性類型 描述 buildType BuildType variant 的 BuildType。 mergedFlavor ProductFlavor DefaultConfig 的值 testVariant BuildVariant 將會測試該variant 的 Build Variant packageLibrary Zip 打包成Library AAR 歸檔文件的任務。如果不是庫項目可以為null。
    TestVariant 類增加了以下屬性:

    屬性名稱 屬性類型 描述 buildType BuildType variant 的 BuildType。 productFlavors List variant 的 ProductFlavors。總是不為null,但可以是空集合。 mergedFlavor ProductFlavor 對android.defaultConfig 和 variant.productFlavors的合並 signingConfig SigningConfig 用於 variant 的 SigningConfig 對象 isSigningReady boolean 如果該 variant 有簽名所需的所有信息則為true。 testedVariant BaseVariant 經過TestVariant測試過的BaseVariant。 dex Dex 將代碼生成dex的任務。如果variant是一個庫,這個值可以為 null。 packageApplication PackageApplication 打包最終的APK的任務。如果variant是一個庫,這個值可以為 null。 zipAlign ZipAlign 對apk進行zipaligns(優化對齊)的任務。如果variant是一個庫或者APK不能被簽名,這個值可以為 null。 install DefaultTask 安裝任務。可以為 null。 uninstall DefaultTask 卸載任務。 connectedAndroidTest DefaultTask 在已連接的設備上運行 android 測試的任務。 providerAndroidTest DefaultTask 使用擴展 API 運行android 測試的任務。
    Android 的特定任務類型的 API。
  • ProcessManifest
  • File manifestOutputFile
  • AidlCompile
  • File sourceOutputDir
  • RenderscriptCompile
  • File sourceOutputDir
  • File resOutputDir
  • MergeResources
  • File outputDir
  • MergeAssets
  • File outputDir
  • ProcessAndroidResources
  • File manifestFile
  • File resDir
  • File assetsDir
  • File sourceOutputDir
  • File textSymbolOutputDir
  • File packageOutputFile
  • File proguardOutputFile
  • GenerateBuildConfig
  • File sourceOutputDir
  • Dex
  • File outputFolder
  • PackageApplication
  • File resourceFile
  • File dexFile
  • File javaResourceDir
  • File jniDir
  • File outputFile
  • 要修改最終輸出的文件,可以在 variant 對象上直接使用“outputFile”(譯者注:1.0 版本通過variant獲取到的是outputs,是一個List,需要通過對其遍歷或取第一個元素variant.outputs[0].outputFile才能獲得outputFile對象)。
  • ZipAlign
  • File inputFile
  • File outputFile
  • 要修改最終輸出的文件,可以在 variant 對象上直接使用“outputFile”(譯者注:1.0 版本通過variant獲取到的是outputs,是一個List,需要通過對其遍歷或取第一個元素variant.outputs[0].outputFile才能獲得outputFile對象)。
    由於Gradle的工作原理以及Android 插件的配置方式,用於每個任務類型的API會有所限制。 首先,Gradle 想要讓任務只能配置輸入或輸出的位置和可能使用的可選標志。所以在這裡,這些任務只能定義一些輸入或輸出。
    其次,這些任務的絕大多數的輸入都是有實際意義的,它們往往來自sourceSetsBuild TypesPruduct Flavor的混合值。為了保持構建文件易於閱讀和理解,目的是要讓開發人員通過DSL進行稍微調整就可以修改構建,而不是要深入任務的選項和輸入並且去修改它們。
    此外注意到,除了 ZipAlign 任務類型,所有其他類型都需要設立私有數據來讓它們正常運行。這意味著不可能手動創建這些類型的新任務。

    這個 API 也可能會被更改。一般情況下,當前 API 是圍繞著任務給定的輸出或輸入(如果可能)的入口來添加額外的處理的(如果需要)。歡迎反饋意見,特別是那些未預知的需求。

    關於 Gradle 任務 (DefaultTask,JavaCompile,Copy,Zip),請參閱 Gradle 文檔。

    BuildType 和 Product Flavor 的屬性參考

    即將推出。 關於 Gradle 任務 (DefaultTask,JavaCompile,Copy,Zip),請參閱 Gradle 文檔。

    使用 sourceCompatibility 1.7

    通過 Android KitKat (buildToolsVersion 19),你可以使用鑽石運算符(即<>),multi-catch,在switch語句中使用string, try with resources等等。要做到這一點,請將以下配置添加到您的構建文件中:
    android { compileSdkVersion 19 buildToolsVersion 19.0.0
    defaultConfig { minSdkVersion 7 targetSdkVersion 19 }
    compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } }
    注意,你可以把 minSdkVersion 的值設為19之前的版本,只是你只能使用除了try with resources之外的其他新語言特性。如果你想要使用 try with resources,你就需要把minSdkVersion 也設為 19。
    你還需要確認 Gradle 使用JDK 1.7或更高的版本。(並且Android Gradle 插件也需要0.6.1或更高的版本。)

     

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved