【Gradle】自定义Android Gradle工程
自定义Android Gradle工程
defaultConfig默认配置
defaultConfig是Android对象中的一个配置项,负责定义所有的默认配置。一个基本的defaultConfig配置如下:
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig{
applicationId "com.wangyz.app"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
//...
}
}
applicationId
applicationId是ProductFlavor的一个属性,用于指定生成的App的包名,默认情况下是Null.这个时候在构建的时候,会从我们的AndroidManifest.xml文件读取,也就是我们在AndroidManifest.xml文件中配置的manifest标签的package属性值。
minSdkVersion
minSdkVersion是ProductFlavor的一个方法,对应的方法原型为:
public void minSdkVersion(int minSdkVersion){
setMinSdkVersion(minSdkVersion);
}
它可以指定我们的App最低支持的Android操作系统版本,其对应的值是Android Sdk的API LEVEL.它还有两个方法原型:
public void setMinSdkVersion(@Nullable String minSdkVersion){
setMinSdkVersion(getApiVersion(minSdkVersion))
}
public void minSdkVersion(@Nullable String minSdkVersion){
setMinSdkVersion(minSdkVersion)
}
targetSdkVersion
这个用于配置我们基于哪个Android SDK开发,它的可选值和minSdkVersion一样。没有配置的时候,也会从AndroidManifest.xml读取。
versionCode
它也是ProductFlavor的一个属性,用于配置Android App的内部版本号,是一个整数,通常用于版本的升级,没有配置的时候,从AndroidManifest.xml读取。方法原型是:
@NonNull
public ProductFlavor setVersionCode(Integer versionCode){
mVersionCode = versionCode;
return this;
}
@Override
@NonNull
public Integer getVersionCode(){
return mVersionCode;
}
versionName
用于配置Android App的版本名称,如V1.0.0等。
testApplicationId
用于配置测试App的包名,默认情况下是applicationId+".test"。
testInstrumentationRunner
用于配置单元测试时使用的Runner,默认使用的是android.test.InstrumentationTestRunner。
signingConfig
配置默认的签名信息,对生成的App签名。
proguardFile
用于配置App ProGuard混淆所使用的Proguard配置文件。
proguardFiles
这个也是配置ProGuard的配置文件,只不过它可以同时接受多个配置文件,因为它的参数是一个可变类型的参数。
配置签名信息
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs{
release{
storeFile file("myrelease.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
}
}
上面例子中,配置了一个名为release的签名配置,除此之外,还可以配置多个不同的签名信息。
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs{
release{
storeFile file("myrelease.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
debug{
storeFile file("mydebug.keystore")
storePassword "password"
keyAlias "MyDebugKey"
keyPassword "password"
}
}
}
现在已经配置好了两个签名信息,但还没有被应用,应用方法如下:
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs{
release{
storeFile file("myrelease.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
debug{
storeFile file("mydebug.keystore")
storePassword "password"
keyAlias "MyDebugKey"
keyPassword "password"
}
}
defaultConfig{
applicationId "com.wangyz.app"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
signingConfig signingConfigs.debug
}
}
除了上面的默认签名配置外,也可以对构建类型分别配置签名信息。
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
signingConfigs{
release{
storeFile file("myrelease.keystore")
storePassword "password"
keyAlias "MyReleaseKey"
keyPassword "password"
}
debug{
storeFile file("mydebug.keystore")
storePassword "password"
keyAlias "MyDebugKey"
keyPassword "password"
}
}
buildTypes{
release{
signingConfig signingConfigs.release
}
debug{
signingConfig signingConfigs.debug
}
}
}
构建的应用类型
如果想增加新的构建类型,在buildTypes{}代码块中继续添加元素就可以。
applicationIdSuffix
applicationIdSuffix是BuildType的一个属性,用于配置基于默认的applicationId的后缀。
debuggable
debuggable用于配置一个可供调试的apk。其值可以true或false。
jniDebuggable
用于配置是否生成一个可供调试jni代码的apk。可接受boolean类型的值。
minifyEnabled
用于配置该BuildType是否启用Proguard混淆,接受boolean类型的值。
multiDexEnabled
用于配置该BuildType是否启用自动拆分多个Dex的功能。
proguardFile
用于配置Proguard混淆使用的配置文件。
proguardFiles
用于配置Proguard混淆使用的配置文件,可同时配置多个Proguard配置文件。
shrinkResources
用于配置是否自动清理未使用的资源,默认为false。
signingConfig
配置该BuildType使用的签名配置。
每一个BuildType都会生成一个SourceSet,默认位置为src//。新增的BuildType名字不能是main和androidTest,因为这两个已经被系统占用,同时每个BuildType之间名称不能相同。
使用混淆
代码混淆是一个非常有用的功能,它不仅能优化代码,让apk包变得更小,还可以混淆原来的代码,让反编译的人不容易看明白业务逻辑。
android{
buildTypes{
release{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
debug{
}
}
}
启用Zipalign优化
zipalign是Android为我们提供的一个整理优化apk文件的工具。它能提高系统和应用的运行效率,更快地读写apk中的资源,降低内存的使。
android{
buildTypes{
release{
zipAlignEnabled true
}
debug{
}
}
}
【Gradle】自定义Android Gradle工程的更多相关文章
- 【Gradle】Android Gradle 插件
Android Gradle 插件 Android Gradle 插件简介 从Gradle角度来看,Android其实是Gradle的一个第三方插件,它是由Google的Android团队开发的.但从 ...
- Gradle之Android Gradle Plugin 主要流程分析(二)
[Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要流程分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plugin ...
- Gradle之Android Gradle Plugin 主要 Task 分析(三)
[Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要 Task 分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plu ...
- 【Gradle】Android Gradle 高级自定义
Android Gradle 高级自定义 使用共享库 Android的包,如android.app,android.content,android.view,android.widget等,是默认包含 ...
- 【Gradle】Android Gradle 多渠道构建
Android Gradle 多渠道构建 多渠道构建的基本原理 在Android Gradle中,定义了一个叫Build Variant的概念,一个Build Variant=Build TYpe+P ...
- 【Gradle】Android Gradle 多项目构建
Android Gradle 多项目构建 Android 项目区别 Android项目一般分为库项目,应用项目,测试项目,Android Gradle 根据这些项目分别对应3种插件:com.andro ...
- 《Gradle权威指南》--自定义Android Gradle工程
No1: minSdkVersion public void minSdkVersion(int minSdkVersion){ setMinSdkVersion(minSdkVersion); } ...
- 读书笔记--Android Gradle权威指南(上)
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...
- 《Gradle权威指南》--Android Gradle插件
No1: Android Gradle插件分类 App插件id:com.android.application Library插件id:com.android.library Test插件id:com ...
随机推荐
- DFA最小化,语法分析初步
1.将DFA最小化:教材P65 第9题 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 语言:(01 | 10)*(01 | 10) 自动机图: DFA状态转换矩阵 ...
- day01-day02 初识java、注释、变量、变量命名、基本数据类型
1. 初识java 1) 什么是java java是一门高级的计算机编程语言 2) JDK的安装 2.1) 下载2.2) 安装2.3) 验证 3) 环境变量的配置 3.1) 打开环境变量3.2) 配置 ...
- Linux-进程的观察
16.1.1 进程与程序 ·程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘.光盘.软盘.磁带等), 为实体文 件的型态存在: ·进程 (process): ...
- mysql 查询存在A表中而不存在B表中的数据
有两张表,学生信息表infolist: 学生姓名表namelist: 现要查询出,存在infolist中,而不存在namelist中的学生,语句如下: select * from infolist w ...
- Flask 教程 第十三章:国际化和本地化
本文翻译自The Flask Mega-Tutorial Part XIII: I18n and L10n 这是Flask Mega-Tutorial系列的第十三部分,我将告诉你如何扩展Microbl ...
- springcloud vue.js 微服务分布式 前后分离 集成代码生成器 shiro权限 activiti工作流
1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...
- SSH框架之Spring+Struts2+Hibernate整合篇
回顾 -Hibernate框架 ORM: 对象关系映射.把数据库表和JavaBean通过映射的配置文件映射起来, 操作JavaBean对象,通过映射的配置文件生成SQL语句,自动执行.操作数据库. 1 ...
- 设置UICollectionViewCell圆角和阴影
设置cell圆角: cell.contentView.layer.cornerRadius =2.0f; cell.contentView.layer.borderWidth =1.0f; cell. ...
- Python基础语法-List
列表的操作方法 列表中存放的数据是可以进行修改的,比如"增"."删"."改"" 添加元素("增" append ...
- RabbitMQ基础理解
RabbitMQ基本理解 MQ是消息中间件,常见的有RabbitMQ,Kafka,RocketMQ,activeMQ 等,用于分布式系统中.作用有三点 解耦 异步 削峰 RabbitMQ 整体上是一个 ...