一, Module: app中gradle参数说明 首先举个例子,而后一 一说明android
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') }
下面开始对上面例子中使用的参数进行说明apache
开头第一行apply plugin: ‘com.android.application’,这表示该module是一个app module,应用了com.android.application插件,若是是一个android library,那么这里的是apply plugin: ‘com.android.library’。json
android{}表示的是Android专有的一些配置api
compileSdkVersion表示基于那个SDK编译的app
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文件gradle
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包。这一点是不一样的。ui
在平时的打包发布时若是须要更改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"引用一下就能够了。