(浅谈)AndroidStudio中关于多渠道打包相关处理
来源:互联网 发布:江苏省软件检测中心 编辑:程序博客网 时间:2024/06/05 11:10
(好记性,不如烂笔头)
在新的安卓IDE下,multi-channel(多渠道)进行多市场分发时,经常遇到“好美的风景,无法直看”的尴尬场景,这里先列举一下关于我在build.gradle中及AndroidManifest.xml进行multi-channel的相关浓缩配置:
AndroidManifest.xml下
<meta-data android:name="TD_CHANNEL_ID" android:value="${ONEAPM_TEST_CHANNEL}" />
有的骚年可能拜读UMENG_CHANNEL,然后放了大招“COPY一下,马上解决”,这里先看下UMENG_CHANNEL在AndroidManifest.xml下的PlaceHolder配置
<meta-data android:name="UMENG_CHANNEL" android:value="Channel_ID" />
这里的meta-data的name,在特殊需求下我们需要据此获取渠道Name,用以针对性的进行渠道需求(name值随意发挥)。meta-data下的value值用于我们在build.gradle下进行多渠道分发时,生成的渠道包所要变换的特定Channel值,可能有点难以理解,下面展示build.gradle下的配置,可能有助于吸收:
build.geadle下
android { ... defaultConfig { ... manifestPlaceholders = [ ONEAPM_TEST_CHANNEL:"default_channel" ] } productFlavors { default_channel{} wandoujia{} _360{}//这里可进行Channel定义 } productFlavors.all { flavor ->flavor.manifestPlaceholders = [ ONEAPM_TEST_CHANNEL:name ] }}
到此,可能稍微理解了一下上面带有下划线的一句话(meta-data下的value值用于我们在build.gradle下进行多渠道分发时,生成的渠道包所要变换的特定Channel值
),manifestPlaceholders中的default_channel值可随意定,主要用于默认的渠道名。更为重要的是实践是理解万物原理的唯一标准,下面列举multi_channel的命令:
Command :gradlew assembleRelease注:值得一提的是,AndroidStudio底部Tab可以找到一个Terminal,点击可看到类似CMD窗口的内容,把命令直接放大招到此,即可进行multi_channel的编译。
骚年们,到此还不是成功的最后一步,最后一步谁呢?当然是QA的鉴定,这里所指不是让公司的QA进行测验,而是我们需要进行反编译查看AndroidManifest.xml下的meta-data的value内容是否变成我们所编译完成的多渠道Name值。我是用的apktool进行的反编译,此类文章网上已经很多了,重要的是我们反编译后,meta-data的value内容会变成包名所对应的渠道名。如:wandoujia{}名称对应:
manifestPlaceholders = [ ONEAPM_TEST_CHANNEL:"wandoujia" ]
有时,需求可能让我们在APP中获取multi-channel的Name用以针对性的处理一些逻辑,下面举例获取APP渠道名的程序:
/ * 获取渠道名 * @param activity * @return String */ public static String getChannelName(Activity activity) { if (activity == null) { return ""; } String channelName = ""; try { PackageManager packageManager = activity.getPackageManager(); if (packageManager != null) { ApplicationInfo applicationInfo = packageManager.getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA); if (applicationInfo != null) { if (applicationInfo.metaData != null) { channelName = applicationInfo.metaData.getString("TD_CHANNEL_ID"); } } } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return channelName; }
获取渠道名主要是针对一些统计等相关需求时可能会用到第三方平台,这时如果渠道没有配置成功,在反编译后是看不到meta-data这条配置的,相反,配置成功后可查看到我们的渠道名已经征服了AndroidManifest下的meta-data。
- (浅谈)AndroidStudio中关于多渠道打包相关处理
- 关于AndroidStudio多渠道打包
- 关于androidStudio使用多渠道打包
- androidStudio 多渠道打包
- AndroidStudio多渠道打包
- AndroidStudio多渠道打包
- AndroidStudio多渠道打包
- AndroidStudio多渠道打包
- AndroidStudio多渠道打包心得
- AndroidStudio多渠道打包
- Androidstudio 多渠道打包apk
- Android:AndroidStudio多渠道打包
- AndroidStudio多渠道打包
- AndroidStudio多渠道打包使用
- AndroidStudio多渠道打包
- AndroidStudio多渠道打包
- AndroidStudio 多渠道打包
- AndroidStudio多渠道打包
- Arc 转MRC
- 前端学习路线
- Java中的内部类的使用
- kvm 虚拟机的启动
- Web上的用户登录功能安全
- (浅谈)AndroidStudio中关于多渠道打包相关处理
- Nginx 服务器安装及配置文件详解
- png转jpg背景颜色改变的问题
- xcode中leaks使用
- Win 32同步与异步串口通讯
- JS学习总结 - 数据类型,转换
- 一千行MySQL学习笔记
- UML入门 之 交互图 -- 时序图 协作图详解
- 最近碰到一个oracle“分布式事务处理已经开始”的问题