一, 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"引用一下就能夠了。