每當app發(fā)布新版本時驱负,需要發(fā)布到不同的應(yīng)用市場嗦玖,比如百度、豌豆莢等跃脊,為了統(tǒng)計app在每個市場的下載量宇挫、安裝量等,需要給app打上唯一標識酪术,美團的解決方案器瘪,以下是用Android Studio實現(xiàn)這一功能翠储。
一、在AndroidManifest.xml里設(shè)置動態(tài)渠道變量
meta-data放在application下橡疼,上面的value值就是區(qū)分每個市場的標識援所。
private String getManifestChannel(Context context) {
try {
PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString("channel");
} catch (PackageManager.NameNotFoundException ignored) {
}
return "";
}
通過上面的代碼即可獲取渠道標識。
二欣除、在build.gradle文件中配置productFlavors
productFlavors {
xiaomi {
manifestPlaceholders = [channel: "xiaomi"]
}
baidu {
manifestPlaceholders = [channel: "baidu"]
}
wandoujia {
manifestPlaceholders = [channel: "wandoujia"]
}
}
或者
productFlavors {
xiaomi {}
baidu {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [channel: name]
}
三住拭、執(zhí)行Build->Generate Signed APK
到下圖操作的時候,全選渠道历帚,然后點擊finish
如果要自定義apk名稱滔岳,可以在build.gradle中配置如下代碼
buildTypes {
//正式apk
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// 自定義輸出配置
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 輸出apk名稱為app_v1.0_baidu.apk
def fileName = "app_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
//測試apk
debugConfig {
// 自定義輸出配置
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 輸出apk名稱為app_v1.0_baidu.apk
def fileName = "app_debug_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
如果需要為不同渠道定制不同的資源,如圖片抹缕、文字信息等
右擊項目->新建Android resource directory,選擇資源保存的文件夾墨辛,如下圖所示:
把工程的查看文件模式切換為Project(一般我們是使用Android文件模式的)
重新打包即可卓研。
如果App內(nèi)部有優(yōu)先跳轉(zhuǎn)到所發(fā)渠道的應(yīng)用市場評價這個功能,那么就需要給不同的渠道配置不同的渠道信息睹簇,比如配置不同渠道的包名奏赘,則可以在build.gradle中自定義渠道包名屬性。
productFlavors {
xiaomi {
buildConfigField "String", "CHANNEL_PACKAGE", "\"" + "com.xiaomi.market" + "\""
}
baidu {
buildConfigField "String", "CHANNEL_PACKAGE", "\"" + "com.baidu.appsearch" + "\""
}
wandoujia {
buildConfigField "String", "CHANNEL_PACKAGE", "\"" + "com.wandoujia.phoenix2" + "\""
}
}
通過Java代碼BuildConfig.CHANNEL_PACKAGE獲取太惠。