今天主要是想说说 Gradle( Gradle Plugin User Guide) 我所知道的一些东西,
老规矩,无图不说话。。。
概念
Gradle构建工具是任务驱动型的构建工具,并且可以通过各种Plugin插件扩展功能以适应各种构建任务。对应Android项目的Gradle插件就是Android Gradle Plugin。
目标
- 让重用代码和资源变得更加容易。
- 让创建同一应用程序的不同版本变得更加容易,无论是多个apk发布版本还是同一个应用的不同定制版本。
- 让构建过程变得更加容易配置,扩展和定制。
- 整合优秀的IDE
特点
- 采用了Domain Specific Language(DSL语言)来描述和控制构建逻辑。
- 构建文件基于Groovy,并且允许通过混合声明DSL元素和使用代码来控制DSL元素以控制自定义的构建逻辑。
- 支持Maven或者Ivy的依赖管理。
- 非常灵活。允许使用最好的实现,但是不会强制实现的方式。
- 良好的API工具供IDE集成。
作用 && 具体用法
引用插件
如下引用 JAVA
或者 Android
apply plugin: 'java'|'android'
重配项目结构
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java', '.apt_generated']
aidl.srcDirs = ['src/main/aidl', '.apt_generated']
assets.srcDirs = ['src/main/assets']
res.srcDirs =
[
'src/main/res/home',
'src/main/res/resource',
'src/main/res/'
]
}
}
注意:srcDir将会被添加到指定的已存在的源文件夹中(这在Gradle文档中没有提到,但是实际上确实会这样执行)。
替换默认的源代码文件夹,你可能想要使用能够传入一个路径数组的srcDirs来替换单一的srcDir。以下是使用调用对象的另一种不同方法:
sourceSets {
main.java.srcDirs = ['src/java']
main.resources.srcDirs = ['src/resources']
}
想要获取更多信息,可以参考Gradle文档中关于Java Pluign的部分。
定义逻辑代码
def packageTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
def versionPropsFile = file("version.properties")
//使用 输出 "version_name_2016_05_15"
fileName = "versionProps['VERSION_NAME'].toString()_packageTime()"
签名配置
可参考:Gradle构建项目时,将敏感信息保存在build.gradle之外
android {
signingConfigs {
debug {
storeFile file("debug.keystore")
}
myConfig {
storeFile file("other.keystore")
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
}
buildTypes {
foo {
debuggable true
jniDebugBuild true
signingConfig signingConfigs.myConfig
}
}
}
注意:只有默认路径下的debug keystory不存在时会被自动创建。更改debug keystory的路径并不会自动在新路径下创建debug keystory。如果创建一个新的不同名字的SignConfig,但是使用默认的debug keystore路径来创建一个非默认的名字的SigningConing,那么还是会在默认路径下创建debug keystory。换句话说,会不会自动创建是根据keystory的路径来判断,而不是配置的名称。
注意:虽然经常使用项目根目录的相对路径作为keystore的路径,但是也可以使用绝对路径,尽管这并不推荐(除了自动创建出来的debug keystore)。
混淆
android {
buildTypes {
release {
minifyEnabled false //是否开启混淆编译
proguardFile getDefaultProguardFile('proguard-android.txt')
}
}
productFlavors {
flavor1 {
}
flavor2 {
proguardFile 'some-other-rules.txt'
}
}
}
混淆规则:android安全——混淆技术小摘
Dependencies,Android Libraries and Multi-project setup(依赖关系,Android库和多项目设置)
后面补上
测试
后面补上
多渠道打包
productFlavors {
miui {
}
wandoujia {
}
}
...
task管理
后面补上
自定义配置
resValue "string", "app_name", "name_1"
buildConfigField "boolean", "IS_LOG", "true"
manifestPlaceholders = [
XG_V2_ACCESS_ID : versionProps['XG_V2_ACCESS_ID'].toString(),
XG_V2_ACCESS_KEY: versionProps['XG_V2_ACCESS_KEY'].toString()]
解决方法数超标
解决方法数超65536 java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536
Gradle构建功能太强大 ,未完待续…
导读:Google I/O 2016开发者大会
DevTools 新功能:命令菜单快捷键和 HTML 格式化
用 Google Cloud 打造你的私有免费 Git 仓库
参考:
- http://avatarqing.github.io/Gradle-Plugin-User-Guide-Chinese-Verision/build_variants/product_flavors.html
- http://mp.weixin.qq.com/s?__biz=MzA4NTQwNDcyMA==&mid=402733201&idx=1&sn=052e12818fe937e28ef08331535a179e#rd
- http://www.jiechic.com/archives/the-idea-and-gradle-use-summary
- https://docs.gradle.org/current/userguide/java_plugin.html
- http://www.open-open.com/lib/view/open1439216256770.html
- http://www.lxway.com/612841466.htm
- http://www.zircon.me/06-25-2015/about-gradle.html