android中的多渠道打包,android多渠道打包
因为要统计各个市场的下载量和其他数据,所以在打包的时候就需要针对每个渠道单独打包,于是,多渠道打包自然就出现了。不然一个一个打可真是要命。1、在AndroidManifest.xml文件的标签里面设置:Javaandroid:name="APP_CHANNEL_VALUE"android:value="${APP_CHANNEL_VALUE}" />123android:name="APP_
因为要统计各个市场的下载量和其他数据,所以在打包的时候就需要针对每个渠道单独打包,于是,多渠道打包自然就出现了。
不然一个一个打可真是要命。
1、在AndroidManifest.xml文件的标签里面设置:
Java
android:name="APP_CHANNEL_VALUE"
android:value="${APP_CHANNEL_VALUE}" />
1
2
3
android:name="APP_CHANNEL_VALUE"
android:value="${APP_CHANNEL_VALUE}"/>
2、app的build.gradle里面设置(android {}里面):
(1)、defaultConfig {}里面加上:flavorDimensions “default”
(2)、productFlavors里面写上渠道名与渠道号
Java
productFlavors {
//渠道1。渠道名:v1,渠道号v1_100
v1 {
manifestPlaceholders = [
APP_CHANNEL_VALUE: "v1_100"
]
}
//渠道2。渠道名:v2,渠道号:v2_100
v2 {
manifestPlaceholders = [
APP_CHANNEL_VALUE: "v2_100"
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
productFlavors{
//渠道1。渠道名:v1,渠道号v1_100
v1{
manifestPlaceholders=[
APP_CHANNEL_VALUE:"v1_100"
]
}
//渠道2。渠道名:v2,渠道号:v2_100
v2{
manifestPlaceholders=[
APP_CHANNEL_VALUE:"v2_100"
]
}
}
(3)、设置输出的apk名称(方便查看):
Java
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "novel_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
outputFileName = fileName
}
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
buildTypes{
release{
minifyEnabledfalse
proguardFilesgetDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
applicationVariants.all{variant->
variant.outputs.all{output->
defoutputFile=output.outputFile
if(outputFile!=null&&outputFile.name.endsWith('.apk')){
deffileName="novel_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
outputFileName=fileName
}
}
}
}
}
这个是apk的名称:
def fileName
= “novel_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk”
defaultConfig.versionName:版本号。
releaseTime():时间(具体方法接下来说)
variant.productFlavors[0].name:渠道名(这里为v1或者v2)
apk名称为novel_v + 版本号 + 时间 + 渠道名
(4)、releaseTime()方法(写在build.gradle的最外层)
Java
def releaseTime() {
return new Date().format("MMdd", TimeZone.getTimeZone("UTC"))
}
1
2
3
defreleaseTime(){
returnnewDate().format("MMdd",TimeZone.getTimeZone("UTC"))
}
3、验证:
(1)、代码中获取渠道号
Java
private String getMetaChannel() {
try {
ApplicationInfo appInfo = getPackageManager()
.getApplicationInfo(this.getPackageName(),
PackageManager.GET_META_DATA);
String value = appInfo.metaData.getString("APP_CHANNEL_VALUE");
return value;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return "";
}
1
2
3
4
5
6
7
8
9
10
11
12
privateStringgetMetaChannel(){
try{
ApplicationInfoappInfo=getPackageManager()
.getApplicationInfo(this.getPackageName(),
PackageManager.GET_META_DATA);
Stringvalue=appInfo.metaData.getString("APP_CHANNEL_VALUE");
returnvalue;
}catch(PackageManager.NameNotFoundExceptione){
e.printStackTrace();
}
return"";
}
(2)、打debug包
然后运行,便可以打v1渠道的包,在看代码中打印出来的渠道是否正确
若是所有的渠道都是相同的渠道号,可以这样:
Java
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [
APP_CHANNEL_VALUE: “渠道号”,
]
}
1
2
3
4
5
productFlavors.all{
flavor->flavor.manifestPlaceholders=[
APP_CHANNEL_VALUE:“渠道号”,
]
}
哪里有不对的地方欢迎指出。
若是有疑问,或许这两篇能够帮到你:
更多推荐
所有评论(0)