当前位置: 移动技术网 > 移动技术>移动开发>Android > android多渠道打包

android多渠道打包

2019年04月25日  | 移动技术网移动技术  | 我要评论

转载请标明出处,维权必究:https://www.cnblogs.com/tangzh/p/10764726.html 

 

因为要统计各个市场的下载量和其他数据,所以在打包的时候就需要针对每个渠道单独打包,于是,多渠道打包自然就出现了。

不然一个一个打可真是要命。

1、在androidmanifest.xml文件的</application>标签里面设置:

<meta-data
    android:name="app_channel_value"
    android:value="${app_channel_value}" />

 

2、app的build.gradle里面设置(android {}里面):

 

(1)、defaultconfig {}里面加上:flavordimensions "default"

 

(2)、productflavors里面写上渠道名与渠道号

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名称(方便查看):

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 } } } } }

这个是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的最外层)

def releasetime() {
    return new date().format("mmdd", timezone.gettimezone("utc"))
}

 

3、验证:

(1)、代码中获取渠道号

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 ""; }

 

(2)、打debug包

然后运行,便可以打v1渠道的包,在看代码中打印出来的渠道是否正确

 

若是所有的渠道都是相同的渠道号,可以这样:

productflavors.all {
     flavor -> flavor.manifestplaceholders = [
             app_channel_value: “渠道号”,
     ]
 }

 

哪里有不对的地方欢迎指出。

 

若是有疑问,或许这两篇能够帮到你:

https://www.cnblogs.com/tangzh/p/10764638.html

https://www.cnblogs.com/tangzh/p/10764568.html

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网