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

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

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包

bd32ab647dca1e7137011f5b4986793d.png

f4c73d9a0ccecf09881e55620ccc5a52.png

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

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

Java

productFlavors.all {

flavor -> flavor.manifestPlaceholders = [

APP_CHANNEL_VALUE: “渠道号”,

]

}

1

2

3

4

5

productFlavors.all{

flavor->flavor.manifestPlaceholders=[

APP_CHANNEL_VALUE:“渠道号”,

]

}

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

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐