Android Gradle Plugin指南(六)——高级构建定制

Android Gradle Plugin解析 Android Gradle Plugin的源码分析 阅读详情

原文地址: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编译选项)


android {
        compileOptions {
            sourceCompatibility = "1.6"
            targetCompatibility = "1.6"
        }
    }

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


7.1.2 aapt options(aapt选项)


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

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


7.1.3 dex options(dex选项)


android {
        dexOptions {
            incremental false

            preDexLibraries = false

            jumboMode = false

        }
    }

这将应用所有使用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可以直接访问所有对象,或者通过过滤器进行筛选。

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


这三个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版本,需要修改你的构建文件: 

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使用1.7或者更高版本的JDK(Android Gradle plugin也需要0.6.1或者更高的版本)。

从零开始跑通3DGS教程:(五)3DGS训练 本文介绍了在Docker环境中训练3DGS(3D Gaussian Splatting)的方法,属于《从零开始跑通3DGS教程》系列文章的第五部分。主要内容包括:Docker环境准备(基于pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime镜像)、容器内conda环境配置(安装必要依赖和3DGS相关组件)、以及训练命令执行步骤。文章提供了详细的命令行操作流程,帮助读者快速搭建3DGS训练环境。适合在Linux系统、Nvidia GPU环境下使用,完整教程可参考系列文章 阅读详情

相关推荐

有限元缺陷:剪切锁死

有限元缺陷:剪切锁死

wsxww11的博客 5189

Android打包移除assets中的文件

背景 由于需要给厂商提供一个aar包,里面有一个json文件在assets中,在他们项目中,这个json配置文件会有影响,因此需要指导对方在集成的时候将这个json文件打包时候移除。 由于delete的是merge之后的assets文件夹内容,因此在aar包中的也同样会受影响,在最后的apk中可以查看添加这项配置之后,该文件被移除了。 直接上代码 android.applicationVariants.all { variant -> // if (variant.buildT

戴戴的博客 4925

UE4游戏逆向实战:从HOOK明文包到自定义发包的完整流程(附加密算法解析)

本文详细解析了UE4游戏网络通信的逆向工程完整流程。从定位线程发包点、HOOK拦截明文封包,到逆向分析加密解密算法,最终实现自定义组包与加密发送。文章结合实战案例,为游戏安全研究和技术人员提供了一套清晰、可操作的方法论。

weixin_29009081的博客 1236

修改Android Gradle plugin的aapt路径

最近在做一套Andorid插件化方案,在解决资源id冲突的问题时,采用的是修改aapt的方式来做的,修改aapt的方式遇到的最大的问题就是编译插件的时候得替换sdk中的aapt,或者采用自己写的脚本来编译,这样开发过程肯定是很不方便的。因此本文尝试在Gradle plugin上修改aapt路径。

JohnnyYin的博客 3881

GT-suite v2016的下载和安装

1 写在前面 GT-suite 是一款用来做内燃机仿真的软件。在安装过程中遇到很多问题,网上的安装教程也大都抄来抄去,试着安装了几遍都没有成功。最终在贴吧一个老哥的帖子里找到了解决办法,但是老哥的帖子也不是很详细,所以做了这个详细版本的教程。 GT-suite v2016安装包: 链接:https://pan.baidu.com/s/1JZPgJ8_-J-L8rV84-eHedQ 提取码:uj...

kisssshot的博客 3万+

1.14、基于NARX神经网络的磁悬浮建模(matlab)

数据准备:首先,需要准备用于训练和测试的磁悬浮系统的输入和输出数据,包括磁力、电流、位置、速度等信息。数据可以被保存在MATLAB的数据文件中,并加载到工作空间中。使用MATLAB的神经网络工具箱,创建一个NARX神经网络。需要定义网络的层次结构、节点数、激活函数等参数。通常,NARX网络包括自回归层和外部输入层。数据预处理:对加载的数据进行预处理,包括去除噪声、归一化处理等操作,以确保数据质量和网络训练的稳定性。使用MATLAB的训练函数,如trainlm或者trainbr,对NARX神经网络进行训练。

XU157303764的博客 1998

Android Gradle Plugin、Gradle、 Build Tools、JDK版本对应关系

Android SDK Build-Tools 是构建 Android 应用所需的一个 Android SDK 组件,安装在 <sdk>/build-tools/ 目录中

libie_lt的专栏 1万+

YOLOv8工业缺陷检测实战:攻克光照不均难题,精度从70%到92%的全流程优化(附缺陷数据集)

YOLOv8在工业缺陷检测中突破光照不均难题,核心是“硬件控光+数据造景+模型聚焦+训练攻坚硬件控光:从源头减少光照变异,降低算法难度;数据造景:用CLAHE、合成样本让模型“见过足够多的光照情况”;模型聚焦:用ECA注意力和Focal-EIoU损失,让模型盯住缺陷而非光照;训练攻坚:分阶段+难例挖掘,强迫模型学习薄弱点。这套方案已在汽车轴承、手机外壳、PCB板3类产线落地,平均精度提升20%+,漏检率控制在0.08%以内,完全满足工业级要求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1195

记录下新安装AndroidStudio关于SDK,gradle即GradlePlugin的安装

修改下载地址到国内镜像 当前阿里云的镜像还有效。前面的IP地址可能失效,但可以在。

qq_33347809的博客 880

简要介绍 | 雷达穿墙成像及其应用场景

本文简要介绍了雷达穿墙成像技术的原理、研究现状、挑战与未来展望,希望能为相关领域的研究与应用提供参考。具有广泛的应用前景。本文将详细介绍雷达穿墙成像的原理,以及其在不同应用场景中的实践。逆时偏移算法(Reverse-Time Migration, RTM)雷达穿墙成像技术是一种先进的遥感技术,具有。的能力,可用于探测室内目标。安全与救援、建筑结构检测等领域。雷达穿墙成像技术的核心原理是。是Green函数,表示从接收点。雷达穿墙成像及其应用场景。雷达穿墙成像及其应用场景。目标识别与定位准确性。

NLOS的博客 2233

获取iOS设备唯一标识UUID(Swift版)

属性返回的UUID是与应用程序相关联的,也就是说,如果用户卸载并重新安装应用程序,该UUID可能会发生变化。如果您需要一个与设备相关的持久唯一标识符,您可以考虑使用Keychain或其他方法来存储和检索设备标识符。在iOS开发中,我们经常需要获取设备的唯一标识符来进行一些特定的操作,比如设备识别、数据追踪等。在本文中,我将向您展示如何使用Swift编程语言获取iOS设备的唯一标识UUID。通过上述代码,您可以在您的iOS应用程序中轻松获取设备的唯一标识符。属性来获取设备的唯一标识UUID。

BitNetO的博客 1919

Android AOP(三):在Android中Javassist动态编译代码

Android AOP(三):在Android中Plugin Transform Javassist操作Class文件 Javassist作用是在编译器间修改class文件,与之相似的ASM(热修复框架女娲)也有这个功能,可以让我们直接修改编译后的class二进制代码,首先我们得知道什么时候编译完成,并且我们要赶在class文件被转化为dex文件之前去修改。在Transfrom这个api出...

trinity2015的博客 1659

基于STM32XX的LCD液晶显示屏(HS280S010B、驱动芯片:ST7789V)驱动C程序设计

/ 16位/pixel (RGB565)#define LCD_WIDTH 240 // 屏幕宽度。#define LCD_HEIGHT 280 // 屏幕高度。LCD_ROTATION_180, // 180度旋转。LCD_ROTATION_270 // 270度旋转。LCD_ROTATION_90, // 90度旋转。LCD_ROTATION_0 = 0, // 0度旋转。

myron6688的博客 369

Android Gradle Plugin、Gradle、Android Studio版本关系

Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件 (AGP) 添加了几项专用于构建 Android 应用的功能。所要求的版本,可能会导致意外问题。我们建议您使用最新的预览版 Android Studio 和 AGP 来处理以预览版 Android OS 为目标平台的项目。如果使用的 Android Studio 或 AGP 版本低于项目的。如果您的项目不受某个特定版本的 Android Studio 支持,您仍然可以使用。

蓝色的天空的博客 4711

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android Gradle - Gradle、Gradle plugin 基础认知

起由 :因为开发中build项目失败,提示了Gradle相关问题;所以在好奇心的驱使之下,抽时间好好梳理了一下Gradle方面的知识 - -~

Android、前端、小程序、后端 5864

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android Gradle和Gradle插件区别

引言 什么是Gradle?什么是Gradle插件? build.gradle中依赖的classpath 'com.android.tools.build:gradle:2.1.2'和gradle-wrapper.properties中的distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip有什

jinrall的专栏 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Gradle和Android Gradle Plugin

目录一、下表列出每个版本的Gradle plugin所需的Gradle版本:二、什么是GradleGradle集成方式Gradle作用三、什么是Gradle pluginAndroid Gradle Plugin DSLGradle plugin集成方式 一、下表列出每个版本的Gradle plugin所需的Gradle版本: 为了能有更好的体验,我们应该尽可能使用最新版的gradle和gradle plugin。 更新Gradle点这里 Plugin version Required Gradle

开发笔记 3383

expo-gradle-plugin 完全指南:Expo 模块自动链接的 Android 构建管线

`expo-gradle-plugin` 是 Expo 模块自动链接(autolinking)体系在 Android 侧的构建基础设施。它以三个 Gradle 插件加一个共享代码库的形式,把 Expo 模块从 `node_modules` 无缝接入 Android 工程:`expo-autolinking-settings-plugin` 负责在 `settings.gradle` 阶段解析模块清

gitblog_00333的博客 896

Android Gradle Plugin源码分析

gradle

QG 1113

Android Gradle与Gradle Plugin关系

目录 Gradle是什么? Gradle插件又是什么? 问题背景: 明确概念: 关系依赖: 三者版本对应关系: Gradle是什么? Gradle其实就是一个构建项目的工具,即把一堆堆的目录、文件按照一定的规则关联起来,形成一个项目的自动化构建工具。 Gradle插件又是什么? Gradle插件是针对Gradle发行版和Android SDK Build Tools封装的一个工...

zcmain的专栏 5275
上一篇: Android Gradle Plugin指南(五)——Build Variants(构建变种版本)
下一篇: maven 学习笔记(一)-maven相关学习资料地址
spring5555
博客等级 码龄12年 7粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值