AndroidGradlePlugin指南(六)高级构建定制

2024-06-19 13:18

本文主要是介绍AndroidGradlePlugin指南(六)高级构建定制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • AndroidGradlePlugin指南(六)高级构建定制


  • http://www.it165.net/pro/html/201407/17771.html

  • 原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Advanced-Build-Customization

    7、 Advanced Build Customization(高级构建定制)


    7.1 Build options(构建选项)

    7.1.1 Java Compilation options(Java编译选项)


    view source print ?
    1. android {
    2. compileOptions {
    3. sourceCompatibility = "1.6"
    4. targetCompatibility = "1.6"
    5. }
    6. }

    默认值是“1.6”。这个设置将影响所有task编译Java源代码。


    7.1.2 aapt options(aapt选项)


    view source print ?
    1. android {
    2. aaptOptions {
    3. noCompress 'foo''bar'
    4. ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
    5. }
    6. }

    这将影响所有使用aapt的task。


    7.1.3 dex options(dex选项)


    view source print ?
    01. android {
    02. dexOptions {
    03. incremental false
    04.  
    05. preDexLibraries = false
    06.  
    07. jumboMode = false
    08.  
    09. }
    10. }

    这将应用所有使用dex的task。


    7.2 Manipulation tasks(操作task)

    基础Java项目有一组有限的task用于互相处理生成一个输出。

    classes是一个编译Java源代码的task。可以在build.gradle文件中通过脚本很容易使用classes。这是project.tasks.classes的缩写。


    在Android项目中,相比之下这就有点复杂。因为Android项目中会有大量相同的task,并且它们的名字基于Build Types和Product Flavor生成。


    为了解决这个问题,android对象有两个属性:

    * applicationVariants(只适用于app plugin)

    * libraryVariants(只适用于library plugin)

    * testVariants(两个plugin都适用)

    这三个都会分别返回一个ApplicationVariant、LibraryVariant和TestVariant对象的DomainObjectCollection


    注意使用这三个collection中的其中一个都会触发生成所有对应的task。这意味着使用collection之后不需要更改配置。


    DomainObjectCollection可以直接访问所有对象,或者通过过滤器进行筛选。

    view source print ?
    1. android.applicationVariants.each { variant ->
    2. ....
    3. }

    这三个variant类都共享下面的属性:

属性名属性类型说明
nameStringVariant的名字,必须是唯一的。
descriptionStringVariant的描述说明。
dirNameStringVariant的子文件夹名,必须也是唯一的。可能也会有不止一个子文件夹,例如“debug/flavor1”
baseNameStringVariant输出的基础名字,必须唯一。
outputFileFileVariant的输出,这是一个可读可写的属性。
processManifestProcessManifest处理Manifest的task。
aidlCompileAidlCompile编译AIDL文件的task。
renderscriptCompileRenderscriptCompile编译Renderscript文件的task。
mergeResourcesMergeResources混合资源文件的task。
mergeAssetsMergeAssets混合asset的task。
processResourcesProcessAndroidResources处理并编译资源文件的task。
generateBuildConfigGenerateBuildConfig生成BuildConfig类的task。
javaCompileJavaCompile编译Java源代码的task。
processJavaResourcesCopy处理Java资源的task。
assembleDefaultTaskVariant的标志性assemble task。

ApplicationVariant类还有以下附加属性:

属性名属性类型说明
buildTypeBuildTypeVariant的BuildType。
productFlavorsList<ProductFlavor>Variant的ProductFlavor。一般不为空但也允许空值。
mergedFlavorProductFlavorandroid.defaultConfig和variant.productFlavors的合并。
signingConfigSigningConfigVariant使用的SigningConfig对象。
isSigningReadyboolean如果是true则表明这个Variant已经具备了所有需要签名的信息。
testVariantBuildVariant将会测试这个Variant的TestVariant。
dexDex将代码打包成dex的task。如果这个Variant是个库,这个值可以为空。
packageApplicationPackageApplication打包最终APK的task。如果这个Variant是个库,这个值可以为空。
zipAlignZipAlignzip压缩APK的task。如果这个Variant是个库或者APK不能被签名,这个值可以为空。
installDefaultTask负责安装的task,不能为空。
uninstallDefaultTask负责卸载的task。

LibraryVariant类还有以下附加属性:

属性名属性类型说明
buildTypeBuildTypeVariant的BuildType.
mergedFlavorProductFlavorThe defaultConfig values
testVariantBuildVariant用于测试这个Variant。
packageLibraryZip用于打包库项目的AAR文件。如果是个库项目,这个值不能为空。

TestVariant类还有以下属性:

属性名属性值说明
buildTypeBuildTypeVariant的Build Type。
productFlavorsList<ProductFlavor>Variant的ProductFlavor。一般不为空但也允许空值。
mergedFlavorProductFlavorandroid.defaultConfig和variant.productFlavors的合并。
signingConfigSigningConfigVariant使用的SigningConfig对象。
isSigningReadyboolean如果是true则表明这个Variant已经具备了所有需要签名的信息。
testedVariantBaseVariantTestVariant测试的BaseVariant
dexDex将代码打包成dex的task。如果这个Variant是个库,这个值可以为空。
packageApplicationPackageApplication打包最终APK的task。如果这个Variant是个库,这个值可以为空。
zipAlignZipAlignzip压缩APK的task。如果这个Variant是个库或者APK不能被签名,这个值可以为空。
installDefaultTask负责安装的task,不能为空。
uninstallDefaultTask负责卸载的task。
connectedAndroidTestDefaultTask在连接设备上行执行Android测试的task。
providerAndroidTestDefaultTask使用扩展API执行Android测试的task。

Android task特有类型的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”可以改变最终的输出文件夹。

* ZipAlign

* File inputFile

* File outputFile

* 直接在Variant对象中使用“outputFile”可以改变最终的输出文件夹。


每个task类型的API由于Gradle的工作方式和Android plugin的配置方式而受到限制。

首先,Gradle意味着拥有的task只能配置输入输出的路径和一些可能使用的选项标识。因此,task只能定义一些输入或者输出。


其次,这里面大多数task的输入都不是单一的,一般都混合了sourceSet、Build Type和Product Flavor中的值。为了保持构建文件的简单和可读性,目标是要让开发者通过DSL语言修改这些对象来配饰构建的过程,而不是深入修改输入和task的选项。


另外需要注意,除了ZipAlign这个task类型,其它所有类型都要求设置私有数据来让它们运行。这意味着不可能自动创建这些类型的新task实例。


这些API也可能会被更改。一般来说,目前的API是围绕着给定task的输入和输出入口来添加额外的处理(如果需要的时候)。欢迎反馈意见,特别是那些没有预见过的需求。


对于Gradle的task(DefaultTask,JavaCompile,Copy,Zip),请参考Gradle文档。


7.3 BuildType and Product Flavor property reference(BuildType和Product Flavor属性参考)

coming soon。。。。= =
对于Gradle的task(DefaultTask,JavaCompile,Copy,Zip),请参考Gradle文档。

7.4 Using sourceCompatibility 1.7(使用(JDK)1.7版本的sourceCompatibility)

使用Android KitKat(19版本的buildTools)就可以使用diamond operator,multi-catch,switch中使用字符串,try with resource等等(译注:都是JDK7的一些新特性,详情请参考JDK7文档)。设置使用1.7版本,需要修改你的构建文件:
view source print ?
01. android {
02. compileSdkVersion 19
03. buildToolsVersion "19.0.0"
04.  
05. defaultConfig {
06. minSdkVersion 7
07. targetSdkVersion 19
08. }
09.  
10. compileOptions {
11. sourceCompatibility JavaVersion.VERSION_1_7
12. targetCompatibility JavaVersion.VERSION_1_7
13. }
14. }

注意:你可以将minSdkVersion的值设置为19之前的版本,只是你只能使用除了try with resources之外的其它新语言特性。如果你想要使用try with resources特性,你就需要把minSdkVersion也设置为19。

你同样也需要确认Gradle使用1.7或者更高版本的JDK(Android Gradle plugin也需要0.6.1或者更高的版本)。

延伸阅读:

  • 1、Android指南针app的实现原理总结
  • 2、Android高分段进阶攻略(5)android指南针
  • 3、Android插件化 apkplugdemo源码阅读指南10
  • 4、AndroidGradlePluin指南(三)依赖关系、android库和多项目配置
  • 5、AndroidGradlePlugin指南(二)基本项目
  • 6、AndroidGradlePlugin指南(一)简介
  • 7、AndroidGradlePlugin指南(五)BuildVariants(构建变种版本)
  • 8、使用Ant批量打包Android应用完全指南

这篇关于AndroidGradlePlugin指南(六)高级构建定制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075133

相关文章

轻量级在线服装3D定制引擎Myway简介

我写的面向web元宇宙轻量级系列引擎中的另外一个,在线3D定制引擎Myway 3D。 用于在线商品定制,比如个性化服装的定制、日常用品(如杯子)、家装(被套)等物品的在线定制。 特性列表: 可更换衣服款式,按需定制更换模型可实时更改材质颜色可实时添加文本,并可实时修改大小、颜色和角度,支持自定义字体可实时添加艺术图标,并可实时修改大小、颜色和角度,支持翻转、各种对齐可更改衣服图案,按需求定制

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 打造坚固的SSH防护网:端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全性2. 动态防火墙规则3. 隐匿服务4. 改善日志管理5. 灵活性和兼容性6. 低资源消耗7. 防御暴力破解和扫描8. 便于合法用户访问9. 适用于不同类型的服务 端口敲

YTK的高级使用

YTKUrlFilterProtocol 接口 YTKUrlFilterProtocol 接口用于实现对网络请求URL或参数的重写,例如可以统一为网络请求加上一些参数,或者修改一些路径。 例如:在猿题库中,我们需要为每个网络请求加上客户端的版本号作为参数。所以我们实现了如下一个YTKUrlArgumentsFilter 类,实现了 YTKUrlFilterProtocol 接口: //

基于Spring Boot构建淘客返利平台

基于Spring Boot构建淘客返利平台 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将讨论如何基于Spring Boot构建一个淘客返利平台。 淘客返利平台通过整合各种电商平台的商品信息,提供给用户查询和返利功能,从而实现流量变现。以下是实现一个简单的淘客返利平台的步骤。 1. 项目初始化 首先,使用Spri

redis高级用法

redis 慢日志查询 配置参数 slowlog-log-slower-than 10000 #单位微秒 slowlog-max-len 选项指定服务器最多保存多少条慢查询日志 redis-cli slowlog get #获取慢日志1) 1) (integer) 4 # 日志的唯一标识符(uid)2) (integer) 1378781447 # 命令执

Chromium 调试指南2024 - 远程开发(下)

1. 引言 在《Chromium 调试指南2024 - 远程开发(上)》中,我们探讨了远程开发的基本概念、优势以及如何选择合适的远程开发模式。掌握了这些基础知识后,接下来我们将深入了解如何在远程环境中高效地进行Chromium项目的调试工作。 调试是开发过程中至关重要的一环,特别是对于像Chromium这样复杂的大型项目。远程调试不仅可以充分利用远程服务器的强大计算资源,还能确保开发环境的一致

使用 AngularJS 从零构建大型应用

0、导言1、准备工作2、构建框架3、丰富你的directives4、公用的services5、用controllers组织业务 导言 纵览线上各种AngularJS教程,大部分都是基础与一些技巧分析。 如果你已经能运行你的ng-app,但又找不到实际案例可以参考。那么本文应该对您有所帮助。 本文将以电商产品:友好速搭 其中的 店铺后台 作为的实际案例,裸奔展示如何从零构建“自以为大型的”A