Gradle常用配置
Android Studio使用Gradle進行構建,不僅可以非常方便的管理依賴,還可以自定義一些實用的功能,例如多渠道打包,自動簽名apk等。
多渠道打包
上線一款app後需要統計分析各個渠道的使用資料,這就需要對渠道進行標示,這裡以友盟統計為例
- 在AndroidManifest中加入佔位符
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL}"/>
- 在module的build.gradle中加入
android {
defaultConfig {
applicationId "com.linkzhang.gradlesample"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
manifestPlaceholders = [UMENG_CHANNEL: "example"]//預設渠道
}
//自動多渠道打包
productFlavors {
xiaomi {}
_360 {}
baidu {}
wandoujia {}
//...新增其它渠道
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL: name]
}
}
自動簽名apk
使用命令列進行打包,需要讀取簽名配置並自動對apk進行簽名
- 在module的根目錄下新建signing.properties檔案
STORE_FILE = /keystore.jks
STORE_PASSWORD = 123456
KEY_ALIAS = example
KEY_PASSWORD = 123456
- 在module的build.gradle中建立
android {
signingConfigs {
debug {
}
release {
storeFile
storePassword
keyAlias
keyPassword
}
}
}
- 讀取配置檔案
android {
signingConfigs {
debug {
}
release {
storeFile
storePassword
keyAlias
keyPassword
}
}
getSigningProperties()
}
//讀取簽名配置檔案
def getSigningProperties(){
def propFile = file('signing.properties')
if (propFile.canRead()){
def Properties props = new Properties()
props.load(new FileInputStream(propFile))
if (props!=null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
} else {
println 'signing.properties found but some entries are missing'
android.buildTypes.release.signingConfig = null
}
}else {
println 'signing.properties not found'
android.buildTypes.release.signingConfig = null
}
}
- 更改release設定
android {
buildTypes {
release {
minifyEnabled true //開啟程式碼混淆
zipAlignEnabled true
shrinkResources true // 移除無用的resource檔案
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
版本號自增
每次編譯release版本時,版本號自動增加
- 在module的根目錄下新建version.properties檔案
VERSION_CODE=1
- 讀取版本號
def getVersionCode() {
def versionFile = file('version.properties')
if (versionFile.canRead()){
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionFile))
def versionCode = versionProps['VERSION_CODE'].toInteger()
def runTasks = gradle.startParameter.taskNames
//僅在assembleRelease任務是增加版本號
if ('assembleRelease' in runTasks) {
versionProps['VERSION_CODE'] = (++versionCode).toString()
versionProps.store(versionFile.newWriter(), null)
}
return versionCode
} else {
throw new GradleException("Could not find version.properties!")
}
}
- 修改defaultConfig
android {
def currentVersionCode = getVersionCode()
defaultConfig {
applicationId "com.linkzhang.gradlesample"
minSdkVersion 15
targetSdkVersion 23
versionCode currentVersionCode
versionName "1.0"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "example"]//預設渠道
}
}
自定義apk名稱
匯出的apk以app名版本號打包時間_渠道名_release.apk格式命名
- 獲取app名稱和當前時間
// 獲取當前系統時間
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
// 獲取程式名稱
def getProductName(){
return "gradlesample"
}
- 替換檔名
android {
buildType {
release {
//修改生成的apk名字,格式為 app名_版本號_打包時間_渠道名_release.apk
applicationVariants.all { variant ->
variant.outputs.each { output ->
def oldFile = output.outputFile
if (variant.buildType.name.equals('release')) {
def releaseApkName = getProductName() + "_v${defaultConfig.versionName}_${releaseTime()}_" + variant.productFlavors[0].name + '_release.apk'
output.outputFile = new File(oldFile.parent, releaseApkName)
}
}
}
}
}
}
程式碼
不足
每次新建專案都要複製一份,準備寫成Gradle外掛釋出到maven這樣就能很方便的引用了
參考和感謝
相關文章
- AndroidStudio Gradle 常用配置AndroidGradle
- Android Studio Gradle 常用配置詳解AndroidGradle
- 常用gradle命令Gradle
- Gradle-AS配置Gradle
- Mac 配置 gradleMacGradle
- Gradle配置lintOptionsGradle
- Gradle系列(三) Gradle配置構建和渠道包Gradle
- Gradle系列之Android Gradle基礎配置GradleAndroid
- Gradle配置最佳實踐Gradle
- android gradle配置指南AndroidGradle
- 手動為AS配置GradleGradle
- 如何配置gradle環境Gradle
- idea 中配置GradleIdeaGradle
- 安裝 gradle 及如何在idea 配置 gradleGradleIdea
- Gradle 簽名的配置檔案 gradle.propertiesGradle
- Gradle動態配置專案Gradle
- jenkins配置svn、gradle、sshJenkinsGradle
- Mac 安裝和配置gradleMacGradle
- Android Gradle進階配置指南AndroidGradle
- Gradle 配置 BuildConfig詳解GradleUI
- gradle android基本配置詳解GradleAndroid
- gradle的一些常用命令Gradle
- Android Gradle 依賴配置:implementation & apiAndroidGradleAPI
- 在IDEA裡gradle配置和使用IdeaGradle
- Gradle模組化配置及多渠道打包Gradle
- Android面試題之Gradle配置篇Android面試題Gradle
- nginx常用配置Nginx
- redis常用配置Redis
- PHP常用配置PHP
- redis 常用配置Redis
- Android開發:build.gradle 配置指南AndroidUIGradle
- android studio4.0初次gradle配置AndroidGradle
- Nuxt常用配置項UX
- nginx常用配置教程。Nginx
- nginx host常用配置Nginx
- 【IDEA】常用配置Idea
- idea常用配置Idea
- mongodb配置檔案常用配置項MongoDB