个人博客:

http://www.milovetingting.cn

自定义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工程的更多相关文章

  1. 【Gradle】Android Gradle 插件

    Android Gradle 插件 Android Gradle 插件简介 从Gradle角度来看,Android其实是Gradle的一个第三方插件,它是由Google的Android团队开发的.但从 ...

  2. Gradle之Android Gradle Plugin 主要流程分析(二)

    [Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要流程分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plugin ...

  3. Gradle之Android Gradle Plugin 主要 Task 分析(三)

    [Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要 Task 分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plu ...

  4. 【Gradle】Android Gradle 高级自定义

    Android Gradle 高级自定义 使用共享库 Android的包,如android.app,android.content,android.view,android.widget等,是默认包含 ...

  5. 【Gradle】Android Gradle 多渠道构建

    Android Gradle 多渠道构建 多渠道构建的基本原理 在Android Gradle中,定义了一个叫Build Variant的概念,一个Build Variant=Build TYpe+P ...

  6. 【Gradle】Android Gradle 多项目构建

    Android Gradle 多项目构建 Android 项目区别 Android项目一般分为库项目,应用项目,测试项目,Android Gradle 根据这些项目分别对应3种插件:com.andro ...

  7. 《Gradle权威指南》--自定义Android Gradle工程

    No1: minSdkVersion public void minSdkVersion(int minSdkVersion){ setMinSdkVersion(minSdkVersion); } ...

  8. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  9. 《Gradle权威指南》--Android Gradle插件

    No1: Android Gradle插件分类 App插件id:com.android.application Library插件id:com.android.library Test插件id:com ...

随机推荐

  1. iOS编译自动升级版本号脚本

    版权申明: 本文原创首发于以下网站,您可以自由转载,但必须加入完整的版权声明 博客园:https://www.cnblogs.com/MogooStudio/ csdn博客:https://blog. ...

  2. 数据结构学习--单链表(python)

    概念 链表(linked_list)是物理存储单元上非连续的.非顺序的存储结构,数据元素的逻辑顺序 是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间) ,另一个是指向 ...

  3. IT兄弟连 HTML5教程 DIV+CSS网页标准化布局的优势

    标准的网页都需要对内容进行布局,以前都是采用表格的定位技术,从2005年开始逐步转向DIV+CSS的布局方式,目前绝大多数的网站都是采用这种布局方式.使用DIV+CSS对网站进行布局符合W3C标准,采 ...

  4. Node.js / Python 日志

    一.Node.js 日志 1.原生 Node.js 原生方法其实很简单,就四个: // 输出到 stdout console.log() console.info() = console.log() ...

  5. 一起学Spring之AOP

    概述 在软件开发中,我们重点关注的是业务逻辑代码,但在实际开发中,需要写的代码却不仅仅是业务逻辑,还需要处理记录日志,异常处理,事务控制等一些与业务无关的事情.而且这些代码也是服务端必须的,类似这样的 ...

  6. (转)两种高效过滤敏感词算法--DFA算法和AC自动机算法

    原文:https://blog.csdn.net/u013421629/article/details/83178970 一道bat面试题:快速替换10亿条标题中的5万个敏感词,有哪些解决思路? 有十 ...

  7. js (单个的)点击式下拉菜单

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. mysql安装、使用

    一.下载.安装 1.下载 (1)下载地址 https://dev.mysql.com/downloads/mysql/ (2)此处我下载最新版(8.0.18) 2.安装 (1)解压.并配置环境变量 s ...

  9. MySQL数据库增删改查等常用命令介绍

    MySQL可以说是最常用的小型数据库,加上现在越来越流行的分布式架构,哪怕是一般的中大型项目也可以用MySQL来进行部署. 数据库的操作最常用的就是增删改查,还有一些切换数据库等操作.以下命令不加说明 ...

  10. [Go] 使用net包作为tcp客户端读取http

    1.tcp的客户端,并且直接读取http协议的全部内容,每次读取4096字节,直到最后一个字节是\n并且读取的长度小于4096 conn, err := net.Dial("tcp" ...