一, Module: app中gradle参数说明 首先举个例子,然后一 一说明
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig {
applicationId "com.okkuaixiu.combo"
minSdkVersion 15
targetSdkVersion 25
versionCode 2
versionName "1.0.1"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
signingConfigs {
debug {
storeFile file('../oipoi.keystore')
storePassword "6863"
keyAlias "uuiw"
keyPassword "66763"
}
release {
storeFile file('../oipoi.keystore')
storePassword "6863"
keyAlias "uuiw"
keyPassword "66763"
}
}
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile 'com.android.support:appcompat-v7:25.0.0'
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-v4:25.0.1'
compile 'com.android.support:cardview-v7:25.0.1'
compile files('libs/happy-dns-0.2.7.jar')
compile files('libs/okhttp-2.7.5.jar')
compile files('libs/okio-1.6.0.jar')
compile files('libs/qiniu-android-sdk-7.1.2.jar')
compile(name: 'fastjson-1.2.9', ext: 'jar')
compile files('libs/universal-image-loader-1.9.5.jar')
compile(name: 'xUtils-2.6.14', ext:'jar')
compile(name: 'org.apache.http.legacy', ext:'jar')
compile 'com.umeng.analytics:analytics:latest.integration'
compile 'cn.yipianfengye.android:zxing-library:2.1'
compile files('libs/gson-2.2.4.jar')
}
下面开始对上面例子中使用的参数进行说明
开头第一行apply plugin: ‘com.android.application’,这表示该module是一个app module,应用了com.android.application插件,如果是一个android library,那么这里的是apply plugin: ‘com.android.library’。
android{}表示的是Android专有的一些配置
compileSdkVersion表示基于那个SDK编译的
buildToolsVersion是基于哪个构建工具版本进行构建的。
defaultConfig是默认配置,如果没有其他的配置覆盖,就会使用这里的。看其属性的名字就可以知道其作用,比如applicationId是配置包名的,versionCode是版本号,versionName是版本名称等。
buildTypes是构建类型,常用的有release和debug两种,可以在这里面启用混淆,启用zipAlign以及配置签名信息等。配置签名信息是放在signingConfigs里面,有debug和release两种,storeFile file('../oipoi.keystore')中写的标识这个keystore文件是放在项目的同一个目录下面.storeFile是签名证书文件,keyAlias是别名,keyPassword是key的密码,storePassword是证书的密码
我们可以为不同的buildTypes选择是否启用混淆,一般release发布版本是需要启用混淆的,这样别人反编译之后就很难分析你的代码,而我们自己开发调试的时候是不需要混淆的,所以debug不启用混淆。minifyEnabled为true表示启用混淆,proguardFile是混淆使用的配置文件,这里是module根目录下的proguard-rules.pro文件
dependencies就不属于Android专有的配置了,它定义了该module需要依赖的jar,aar,jcenter库信息。在里面可以看到有几种写法,但是标识都是同一个意思.比如,compile(name: 'alibabauth_accountlink-1.1.4', ext: 'jar')和compile files('libs/umeng_social_api.jar')表示的都是依赖于第三方的jar,所以怎样写都是可以的.但是要注意一点这两种写法都是表示在项目libs目录下存在此jar包,否则会报找不到jar包的错误,这是很明显的。compile 'com.android.support:support-v4:25.0.1',这种写法就表示了是从android中央库中获取的,不需要在本地libs目录下有v4包。这一点是不同的。
在平时的打包发布时如果需要更改apk名称,可以在android{}目录中写法如下:
applicationVariants.all { variant ->
variant.outputs.each { output ->
if (variant.buildType.name.equals('release')) {
output.outputFile = new File(output.outputFile.parent, "正式版-v" +
defaultConfig.versionName + ".apk" );
} else if (variant.buildType.name.equals('debug')) {
output.outputFile = new File(output.outputFile.parent, "测试版-v" +
defaultConfig.versionName + ".apk" );
}
}
}
可以看到根据测试和正式可以有不同的名称。 output.outputFile.parent表示生成apk的路径,这个是默认路径在项目/app/build/outpus/apk,当然我们可以自己写路径。
variant.buildType.name指编译类型,就是debug或者release
defaultConfig.versionName表示在defaultConfig标签下写的版本号
如果想加上日期,可以添加代码:
def releaseTime() {
return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}
在 .apk前面添加defaultConfig.versionName + "-${releaseTime()}.apk"引用一下就可以了。