一:简介:
Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。实现了依赖管理(跟Maven差不多)依赖管理的方式:从 maven 远程仓库、 nexus 私服、 ivy 仓库以及本地文件系统的 jars 或者 dirs 。
二:组成:
1.proguard-rules.pro:这个文件对Java代码编译生成的class文件进行反编译。具体的介绍如下:
#指定代码的压缩级别
-optimizationpasses 5
#包明不混合大小写
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
#优化 不优化输入的类文件
-dontoptimize
#预校验
-dontpreverify
#混淆时是否记录日志
-verbose
# 混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#保护注解
-keepattributes *Annotation*
#如果引用了v4或者v7包
-dontwarn android.support.**
#保持 native 方法不被混淆
-keepclasseswithmembernames class * {
native <methods>;
}
#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
#保持自定义控件类不被混淆
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#保持 Serializable 不被混淆
-keepnames class * implements java.io.Serializable
#保持 Serializable 不被混淆并且enum 类也不被混淆
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可
#-keepclassmembers enum * {
# public static **[] values();
# public static ** valueOf(java.lang.String);
#}
-keepclassmembers class * {
public void *ButtonClicked(android.view.View);
}
#不混淆资源类
-keepclassmembers class **.R$* {
public static <fields>;
}
#避免混淆泛型 如果混淆报错建议关掉
#–keepattributes Signature
2.local.properties:包含了你的 sdk 配置,sdk的路径;当然你还可以配置 ndk 路径;格式与 sdk 一样。
3.settings.gradle:一般显示include ‘:app’,’:myapplication’…其中include包含的model是会被编译的
4.gradle.properties:此文件进行gradle的全局的管理,主要配置项目的全局的配置变量(编译版本的配置)
5.build.gradle这个文件比较重要说明如下:
apply plugin: 'com.android.application'
def releaseTime() {
return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}
android {
compileSdkVersion 23
buildToolsVersion "23"
defaultConfig {
applicationId "......"
minSdkVersion 15
targetSdkVersion 23
versionCode 4
versionName "1.0.3"
}
buildTypes {
release {
}
debug{
buildConfigField "boolean", "LOG_DEBUG", "true"
}
}
//设置虚拟机堆内存空间大小,避免在编译期间OOM
dexOptions {
incremental true
javaMaxHeapSize "4g"
}
//打包不检查
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':library:photoPicker')
}
以上就是基本的build.gradle的配置,
a)apply plugin:必须放在第一行,它可以指定这个module是一个应用(用 apply plugin: ‘com.Android.application’ 配置),或是一个库(用 apply plugin: ‘com.android.library’ 配置)。
b)dependencies:指定远程的依赖或者是本地的依赖,
编译时依赖libs目录下所有的jar文件:
compile fileTree(include: ['*.jar'], dir: 'libs')
编译时依赖本地的library库项目:
compile project(':library')
编译时依赖远程的库项目(下面的库是在低版本中使用Meterial Design是所要加入的):
compile 'com.android.support:appcompat-v7:21.0.3'
d)android的配置比较复杂:
指定编译版本的SDK和编译工具的版本
compileSdkVersion 21
buildToolsVersion 21.1.2
defaultConfig这个是默认配置,全局配置,其中的buildType将会自动的继承:举个例子
defaultConfig {
applicationId com.example.app.application
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName 1.0
ndk {
moduleName app
cFlags -DANDROID_NDK -D_RELEASE
ldLibs m, log, jnigraphics
abiFilters all
}
}
此处apk项目需要指定applicationId(包名)library不需要指定这个属性;接下来就是SDK最小的编译版本,目标的编译版本,版本号和版本名称。至于ndk是指的是ndk可以被直接编译不需要自己操作。
buildTypes这个进行编译的配置,编译的配置分成两种主要是release(发行版),debug(调试版);
compileOptions:这个是对Java版本的配置,毕竟jdk的版本不同所支持的新特性也不一样.
sourceSets:重新指向源码路径
sourceSets {//目录指向配置
main {
manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件
java.srcDirs = ['src']//指定source目录
resources.srcDirs = ['src']//指定source目录
aidl.srcDirs = ['src']//指定source目录
renderscript.srcDirs = ['src']//指定source目录
res.srcDirs = ['res']//指定资源目录
assets.srcDirs = ['assets']//指定assets目录
jniLibs.srcDirs = ['libs']//指定lib库目录
}
debug.setRoot('build-types/debug')//指定debug模式的路径
release.setRoot('build-types/release')//指定release模式的路径
}
lintOptions:这个设置编译的lint开关。程序在build的时候,会执行lint检查,有任何错误或者警告提示,都会终止构建,我们可以将其关掉。
lintOptions {
abortOnError false
}
productFlavors:配置多个产品风味(免费版、付费版、不同渠道版)。创建不同版本的app,通过重写defaultConfig{}的设置。productFlavors是可选的。默认情况下,系统不会自动创建。每个flavor都可以自己的的application id。
productFlavors {
free {
applicationId 'com.example.myapp.free'
}
paid {
applicationId 'com.example.myapp.paid'
}
}
}
signingConfigs:包的签名的配置主要是指定包的签名的文件或者是包的签名的密码:
signingConfigs {
release {
storeFile file(×.keystore)
storePassword ×××
keyAlias ××××
keyPassword ×××
}
}