前言
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 } }
完成几步之后,有几套打包需求我们就建几套相应资源就可以了,这就算是初步完成了换肤的需求