资讯专栏INFORMATION COLUMN

Android 多渠道打包原理和使用

liujs / 3223人阅读

摘要:这篇文章咱们就和做安卓开发的同学聊一下安卓多渠道打包的事情。这里推荐大家看一下友盟开源的一个多渠道打包工具中有相关的实现细。

每次中午吃饭总会和技术同学聊天。当做 iOS 开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS 开发难还是安卓开发难。

这个时候做安卓开发的同学最激动说安卓开发要自己画界面、机型复杂、操作系统多 rom 又被各家改的四不像....开发一个安卓 APP 的时间将近是开发 iOS 所需时间的 2 倍。iOS 开发的同学可能就会反驳说 iOS 开发入门难度比安卓高,开发中第三方库不像安卓那么多,开发设备又必须是 MAC,而安卓随便一台 PC 即可...笔者认为,这个问题因人而异,不想再引起一场争论。其实,今天想说的是,安卓开发中还有一件事情比较痛苦那就是打包。

做过 APP 开发的人都知道安卓的渠道林立,笔者记得曾经工作的一家公司每次发包都要运行脚本去打包,每次打几百个 APK,花费几个小时,电脑都累的风扇呼呼叫。而 iOS 由于其封闭性,渠道除了 AppStore 之外几乎很少了。所以,安卓 APP 开发之后要把 APP 分发出去要做的事情要比 iOS 多这个是一定的。这篇文章咱们就和做安卓开发的同学聊一下安卓 APP 多渠道打包的事情。

APP多渠道打包原理讲解

要多渠道打包,我们就来说一下渠道如何标识。一般来说渠道标识有两个地方可以做:
1、在代码中写,例如 TalkingData 就提供了这种方式

//启动代码
init(final Context context, final String appId,  final String partnerId);
//这种方式不需要在 AndroidManifext.xml 里的 meta-data 申明了 TD_APP_ID 和 TD_CHANNEL_ID

2、在 AndroidManifext.xml 中填写,还拿 TalkingData 举例子

//启动代码
init(final Context context);
//这种方式可以使用多渠道打包工具,方便一次打包多个发布渠道

//AndroidManifext.xml中这样写

如果是多带带打一个 APP 包加上上面的配置直接 IDE 中导出 APK 就行了,如果打很多个 APK 用 IDE 就很费力。 要想多渠道打包,就需要对 Android 的整体的打包编译过程有所了解。下面认识下 Android 的 java 代码、XML 格式的资源文件、图片文件等资源是如何转换成为一个 APK 的。


大家从图中可以看出,大体分为以下 7 个大步:
1、打包资源文件,生成 R.java 文件
2、处理 aidl 文件,生成相应 java 文件
3、编译工程源代码,生成相应 class 文件
4、转换所有 class 文件,生成 classes.dex 文件
5、打包生成 apk
6、对 apk 文件进行签名
7、对签名的 apk 进行 zipalign 对其操作

说明:这里只是大致表明大致的打包编译过程,其实如果细分每一部分还有很多细节。

结合原理和渠道的 1、2 两种设置方法我们分别来说.

1、如果渠道信息是通过 Java 的硬编码方式来做的,我们可以在打包之前预处理 Java 源文件,找到渠道设置关键字,从渠道列表中找到一个渠道设置进去即可。由于脚本这块儿,不同的语言的实现方式不同,这里不做过多的说明。如果有需要的我可以把自己之前 shell 写的一段代码分享了。


2、如果使用写在 AndroidManifext.xml 中,这个就可以通过读取 XML 文件的方式定位到 meta-data 并且 android:name 的值为 TD_CHANNEL_ID 的元节点。把这个元节点的值设置成某一个渠道即可。这里推荐大家看一下友盟开源的一个多渠道打包工具中有相关的实现细 [1]。这个过程发生在上图中的 aapt 阶段,这个阶段做的事情还比较多没有分来来说。


大致原理就是这样,其实也很简单~,就是在正常的 Android 打包编译过程中进行干涉,加入一些逻辑来替换相关的渠道信息,保证打包之后的 APK 中的渠道信息各不相同。
其实这个过程是这样的:

说明:图片来源网络

然后编写脚本或者工具来循环的这个过程....

Android Studio多渠道打包

Android Studio 发布已经好长时间了,Google 也一直在维护在更新,Android 开发的小伙伴你们用起来了吗?听说身边做开发的很多都转向了这个神器。这里,我们就重点说一下如何在 Android Studio 中实现多渠道打包,后续给出一个 Demo来做演示,笔者觉得这样更实用。
第一步在 AndroidManifext.xml 中配置渠道


   

第二步,在 APP 下的 build.gradle 中添加


   productFlavors {
        wandoujia{}
        "1234Test"{}
        "1test111"{}
    }
    
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [ONEAPM_TEST_CHANNEL: name]
    }
    

解释:productFlavors 类似于一个产品的不同特性的配置[2]. productFlavors.all 是一个遍历,每一个 productFlavors 中的值,其中productFlavors 的每一个值都有一个 name ,就是类似 wandoujia 这样的字符,每次循环的时候会替换掉 AndroidManifext.xml 中的${ONEAPM_TEST_CHANNEL}。
第三步,执行打包命令
打开命令行定位到 project 目录,执行

  gradlew assembleRelease

不出意外的话 bulid->outputs->apk 下面会有各个渠道的包,如下图


注意事项:
1、productFlavors 定义的时候里面的类似 wandoujia,不能是数字开头,不能是关键字 test 等,因为你要意识到你在写 gradle 脚本,要符合 groovy 语法。如下面的就不合法

2、flavor.manifestPlaceholders = [ONEAPM_TEST_CHANNEL: name]中的ONEAPM_TEST_CHANNEL 一定要和 AndroidManifext.xml 定义的一致。


打包发布之后还要做什么

开发者花费了很大的心血做出一款 APP 为的就是希望这款 APP 产生它应有的价值。所以我们会集成一些统计例如友盟、talking data,有了它每日活跃、新增、留存就有地方看了,这个估计每个开发者都会做。单更重要的是,我们做出的 APP 要保证在每台手机都能正常的打开和使用,特别是在 APP 同质化越来越严重的今天,你要保证 APP 能够脱颖而出就要保证 APP 稳定,所以我们可以顺手添加以下 OneAPM[3] 就能监控到应用程序运行缓慢、ANR、Crash、WebView、Activity、网络请求等方面的性能,能让开发者第一时间掌握 APP 监控状况。更让人喜欢的是,这款产品只需开发者填入一行代码即可,真可谓是「神器」。


OneAPM Mobile Insight 以真实用户体验为度量标准进行 Crash 分析,监控网络请求及网络错误,提升用户留存。访问 OneAPM 官方网站感受更多应用性能优化体验,想阅读更多技术文章,请访问 OneAPM 官方技术博客。

本文转自 OneAPM官方技术博客

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12484.html

相关文章

  • 借腾讯开源 VasDolly,谈谈 Android 签名渠道打包原理

    摘要:前几天,企鹅电竞团队开源了自己的多渠道打包工具,比美团的更全面一些。四可商用的多渠道打包方案在开源之前,市面上支持签名的多渠道打包方案,就属美团的了,下面简单比对一下它们的优缺点。 showImg(https://segmentfault.com/img/remote/1460000013436224?w=900&h=500); 一、前言 Hi,大家好,我是承香墨影! 当我们需要发布一...

    LMou 评论0 收藏0
  • Gradle实战:Android渠道打包方案汇总

    摘要:美团自动化之旅生成渠道包美团自动化之旅适配渠道包实现参考实现参考深入学习系列教程六多渠道打包产品研发五多渠道打包更便捷的多渠道打包方式打包系列多渠道快速打包 原文地址:http://blog.csdn.net/u0108184... Gradle实战系列文章: 《Gradle基本知识点与常用配置》《Gradle实战:不同编译类型的包同设备共存》《Gradle实战:发布aar包到mav...

    gitmilk 评论0 收藏0
  • 美团渠道打包方案详解,速度快到白驹过隙

    摘要:渠道市场有多分散呢分散到比碎片化还严重,你还在为多渠道打包而头疼吗美团提供了速度快到白驹过隙的多渠道打包方案。 Andorid渠道市场有多分散呢?分散到比Android碎片化还严重,你还在为多渠道打包而头疼吗?美团提供了速度快到白驹过隙的多渠道打包方案。说的有点夸张,对,虽然夸张,但是确实很快,不夸张不足以形容其快。废话不多说,先讲原理,再讲实践方法。 新旧打包方法原理对比讲解 传统方...

    李涛 评论0 收藏0
  • 美团渠道打包方案详解,速度快到白驹过隙

    摘要:渠道市场有多分散呢分散到比碎片化还严重,你还在为多渠道打包而头疼吗美团提供了速度快到白驹过隙的多渠道打包方案。 Andorid渠道市场有多分散呢?分散到比Android碎片化还严重,你还在为多渠道打包而头疼吗?美团提供了速度快到白驹过隙的多渠道打包方案。说的有点夸张,对,虽然夸张,但是确实很快,不夸张不足以形容其快。废话不多说,先讲原理,再讲实践方法。 新旧打包方法原理对比讲解 传统方...

    sutaking 评论0 收藏0
  • Android Studio 使用Gradle渠道打包

    摘要:我们都知道国内应用市场非常多,为了统计各个应用市场的下载量和使用情况,我们需要多渠道的打包。这就要求我们学会使用进行多渠道打包。使用多渠道打包的方式,就需要把上面的配置成下面的方式其中中的值就是你在中自定义配置的值。 我们都知道国内应用市场非常多,为了统计各个应用市场的app下载量和使用情况,我们需要多渠道的打包。如果一个一个的手动去打包岂不烦死了,要多麻烦就有多麻烦。这就要求我们学会...

    n7then 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<