作为Android app,发布多个分发平台是常规操作。然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻辑,这就需要根据渠道使用选择差异化代码。
这里把简单的代码记一下。
首先,分渠道打包很简单。
在项目的build.gradle里设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
android { ... productFlavors { home_site { dimension "money" manifestPlaceholders = [UMENG_CHANNEL_VALUE: "home_site"] } main_store { dimension "money" manifestPlaceholders = [UMENG_CHANNEL_VALUE: "main_store"] } other_store { dimension "money" manifestPlaceholders = [UMENG_CHANNEL_VALUE: "other_store"] } } } |
其中的 dimension 是维度,通过 flavorDimensions 设置。
1
2
3
4
|
defaultConfig { ... flavorDimensions "money" } |
设置维度主要是为了管理方便。
这个项目里总共设置了三个渠道
其中 UMENG_CHANNEL_VALUE 可以随便命名,不过项目里的友盟统计会需要用到渠道名,所以这里就用UMENG的命名方法了。
接下来就是获取当前的渠道名,这样就可以根据不同的渠道包设置不同的逻辑,比如设置某一模块在某些平台发布的版本隐藏,而再另一些平台的版本上显示。
首先,需要在 AndroidManifest.xml 文件定义信息变量。
1
2
3
4
5
6
7
8
9
10
11
|
< application android:icon = "@mipmap/logo" android:label = "@string/app_name" android:name = ".App" android:roundIcon = "@mipmap/logo" android:theme = "@style/AppTheme.NoActionBar" > ... < meta-data android:name = "CHANNEL_NAME" android:value = "${UMENG_CHANNEL_VALUE}" /> </ application > |
然后就可以在Application或Activity中获取了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
ApplicationInfo applicationInfo = null ; try { applicationInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); if (applicationInfo == null ) { return ; } String value = applicationInfo.metaData.getString( "CHANNEL_NAME" ); CommonConfig.CHANNEL_NAME=value; //按渠道设置差异化代码 System.out.println( "CHANNEL_NAME:" +value); switch (value){ case "home_site" : //逻辑1 break ; case "main_store" : //逻辑2 break ; case "other_store" : //逻辑3 break ; } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.jianshu.com/p/05077bbf9bfb