前言
Gradle 是 Android 現在主流的編譯工具,他和 Android Studio 的關系非常緊密,可以說對于一些簡單的程式我們幾乎不需要任何代碼上的配置隻使用 Android Studio 就可以完成編譯和運作。 下面我給大家介紹一些實用的gradle代碼:
1.打包簽名apk
大家在使用gradle時,最基本的就是簽名打包,下面的代碼配置好之後,就可以根據管道和release或者debug包了:
(1)替換AndroidManifest中的占位符
替換AndroidManifest 的app_lable ,也就是應用名
android{
defaultConfig{
manifestPlaceholders = [app_label:"@string/app_name"]
}
}
如果隻想替換debug版本:
android{
buildTypes {
debug {
manifestPlaceholders = [app_label:"@string/app_name_debug"]
}
release {
}
}
}
更多的需求是替換管道編号:
android{
productFlavors {
// 把dev産品型号的apk的AndroidManifest中的channel替換dev
"dev"{
manifestPlaceholders = [channel:"dev"]
}
}
}
(2)配置簽名資訊
在builde.gradle 的android{..} 裡面将簽名設定
signingConfigs {
release {
storeFile file("../yourapp.keystore")
storePassword "your password"
keyAlias "your alias"
keyPassword "your password"
}
}
buildTypes {
debug {
minifyEnabled false
zipAlignEnabled false
shrinkResources false
}
release {
minifyEnabled true//混淆編譯
zipAlignEnabled true
//移除無用的資源檔案
shrinkResources true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
( 3 ) 多管道打包,下面引用友盟的例子:
首先在AndroidManifest 裡面配置PlaceHolder,與build.gradle檔案中替換自己想要改變的值
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
然後在build.gradle裡面設定productFlavors,修改PlaceHolder
productFlavors {
playStore {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
miui {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
這裡也是可以批量修改的
productFlavors {
playStore {}
miui {}
wandoujia {}
}
//批量處理
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
(4)修改打包的檔案名字,根據不同的需求自行配置
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android.applicationVariants.all { variant ->
variant.outputs.all {
if(variant.buildType.name=="release"){
outputFileName = "${sdk}_${defaultConfig.versionName}_${releaseTime()}.apk"
}else {
outputFileName = "${sdk}_${defaultConfig.versionName}_${releaseTime()}_debug.apk"
}
}
}
2.動态應用皮膚
有時我們營運需求就是把app 換皮膚,換icon,更換域名等等原因,應用名重新在應用市場裡面釋出,如果手動去搞未免顯的很Low 也比較費時費力,其實Gradle 裡面已經給我們提供了方法
,我們可以根據需求建立多套assets ,res,和AndroidMainfest
(1)提取工程中,strings,colors,dimens,在開發階段有時為了求快,經常忘記了這麼做,這就是開發習慣的問題了,其實這是給自己在後面的階段埋了坑
(2) 将assets, res ,AndroidManifest 所有東西抽取到一個特定的檔案夾
本人就是在src下面建立了一個同級的src_config檔案夾,該檔案夾下面的子檔案的名字就是對應每一套的打包需求,我的示例打包需求是“dataEye”和“noDataEye”,如下圖所列
(3)配置build.gradle檔案
首先在工程project的build.gradle 裡面配置 ,
ext{
sdk='dataEye' // 對應檔案夾裡面的打包需求
// sdk='noDataEye'
}
然後在app module裡面的build.gradle 裡面,引用assets ,res ,AndroidManifets就可以了
def appId="com.anfeng.demo.${sdk}" // 對應的applicationId
def manifestXml="src_config/${sdk}/AndroidManifest.xml"
def assetsPath="src_config/${sdk}/assets"
def resDir="src_config/${sdk}/res"
android.sourceSets{// 設定引用路徑
main{
manifest.srcFile manifestXml
res.srcDirs=[resDir]
assets.srcDirs assetsPath
}
}
完成幾步之後,有幾套打包需求我們就建幾套相應資源就可以了,這就算是初步完成了換膚的需求