欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android多渠道打包

程序员文章站 2022-04-09 17:10:37
转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10764726.html 因为要统计各个市场的下载量和其他数据,所以在打包的时候就需要针对每个渠道单独打包,于是,多渠道打包自然就出现了。 不然一个一个打可真是要命。 1、在AndroidManifest. ......

转载请标明出处,维权必究: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包

android多渠道打包

android多渠道打包

然后运行,便可以打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