Android Studio 多渠道打包
本文以友盟分享为例。先看
第一步:在AndroidManifest中添加默认渠道
<meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" />
第二步:在build.gradle 中定义buildTypes,productFlavors
buildTypes {
//这里的名字自定义
release{
// 这里是在 applicationId 中添加了一个后缀。
applicationIdSuffix ".release"
// 这里的作用是选择是否混淆代码
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
dev{
applicationIdSuffix ".dev"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// 这里是为了不同的版本设置一些特殊的参数,并不直接和 buildType 关联。
productFlavors{
//自定义名字不过不能和上面buildType中相同,不然Gradle编译会不通过。在这里使用了『flavors_』前缀以便区分。
uc{
/**
* 这里所设置的变量可以直接使用在[AndroidManifest.xml]
* 中,使用方式:android:label="${package_name}"
*/
manifestPlaceholders = [str:"releaseStr",package_name:"com.example.administrator.myapplication"]
resValue("string" , "strKey","uc")
}
baidu{
manifestPlaceholders = [str:"devStr",package_name:"com.example.administrator.myapplication"]
resValue("string" , "strKey","baidu")
}
wandoujia{
manifestPlaceholders = [str:"devStr",package_name:"com.example.administrator.myapplication"]
resValue("string" , "strKey","wandoujia")
}
}
第二步:Build -> Generate Signed Apk,选择签名文件,没有自行创建。选定Build Type,Flavors,这就是我们在build.gradle中定义的名字。Finish后再项目目录下就会生成各个渠道的apk啦。
不同渠道定义的resValue(strKey),你可以根据它去切换不同的图片资源。
String name = getResources().getString(R.string.strKey);
if (name.equals("uc")){
img.setImageResource(R.drawable.a);
}else if(name.equals("baidu")){
img.setImageResource(R.drawable.b);
}else{
img.setImageResource(R.drawable.c);
}