Android官方技术文档翻译——Gradle 插件用户指南(7)
生活随笔
收集整理的這篇文章主要介紹了
Android官方技术文档翻译——Gradle 插件用户指南(7)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
高級構建定制
構建選項
Java 編譯選項
android { ? ? compileOptions { ? ? ? ? sourceCompatibility = "1.6" ? ? ? ? targetCompatibility = "1.6" ? ? } } 默認值為“1.6”。這個配置會影響所有編譯 Java 源代碼的任務。aapt 選項
android { ? ? aaptOptions { ? ? ? ? noCompress 'foo', 'bar' ? ? ? ? ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!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 Types和Product Flavors生成。?
android對象中有兩個(譯者注:我怎么感覺是三個。難道是原文筆誤?)屬性就是為解決這個問題的:?
- applicationVariants(僅適用于應用程序插件)
- libraryVariants(僅適用于庫插件)
- testVariants?(對兩個插件都適用)
注意,訪問這些集合的任何一個都將觸發所有任務的生成。這意味著在訪問這些集合之后不應該再進行(重新)配置。
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<ProductFlavor> | ?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<ProductFlavor> | ?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 想要讓任務只能配置輸入或輸出的位置和可能使用的可選標志。所以在這里,這些任務只能定義一些輸入或輸出。
其次,這些任務的絕大多數的輸入都是有實際意義的,它們往往來自sourceSets、Build Types和Pruduct Flavor的混合值。為了保持構建文件易于閱讀和理解,目的是要讓開發人員通過DSL進行稍微調整就可以修改構建,而不是要深入任務的選項和輸入并且去修改它們。
此外注意到,除了 ZipAlign 任務類型,所有其他類型都需要設立私有數據來讓它們正常運行。這意味著不可能手動創建這些類型的新任務。
這個 API 也可能會被更改。一般情況下,當前 API 是圍繞著任務給定的輸出或輸入(如果可能)的入口來添加額外的處理的(如果需要)。歡迎反饋意見,特別是那些未預知的需求。
關于 Gradle 任務 (DefaultTask,JavaCompile,Copy,Zip),請參閱 Gradle 文檔。?
BuildType 和 Product Flavor 的屬性參考
即將推出。 關于 Gradle 任務 (DefaultTask,JavaCompile,Copy,Zip),請參閱 Gradle 文檔。 <br4>使用 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或更高的版本。)
轉載于:https://www.cnblogs.com/6060b/p/4202931.html
總結
以上是生活随笔為你收集整理的Android官方技术文档翻译——Gradle 插件用户指南(7)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS查看CPU信息、位数、多核信
- 下一篇: c# 如何将字符串中用,分开的数字分别存