通过 AndroidStudio内自带的精简多渠道打包,随着app的体积变大,渠道变多,打包消耗的时间就会越久,所以我也抽了会儿时间,学了下美团的打包方式,差不多半小时内就可以搞好!
因为这篇文章我起源于他人,本应完全转载,但因同时也看了其他多篇文章,遇到了一些不一样的东西,所以有了一些不一样看法,最终为了让自己和他人快速掌握,方便以后使用,所以我写了此篇文章 > < ~
内容概览:
基本概念
前期准备
安装流程
使用流程
扩展知识
常见问题
什么是多渠道包?
渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠道,例如:小米市场、360市场、应用宝市场等
为什么要提供多渠道包?
我们要在安装包中添加不同的标识,应用在请求网络的时候携带渠道信息,方便后台做运营统计(这就是添加渠道信息的用处)
实现多渠道打包的原理
一般来讲,这个渠道的标识会放在AndroidManifest.xml的Application的一个Metadata中。然后就可以在java中通过API获取对应的数据了
如何实现?
现在android渠道多种多样,其实渠道不仅仅局限于应用市场,一种推广方式也可以看做一个渠道,比如:通过人拉人的方式去推广,官网上推广,百度推广等。所以说渠道成千上万,为了推广,有时候一次也会打成千的安装包,那你半天或者一天啥都别干了,接下来介绍三个目前应用较多的打包方式
前期准备 :
1:Python开发环境的安装,美团打包工具(地址1或地址2任选其一既可)
地址1:借鉴文章内作者的云盘地址
地址2:Github安卓多渠道打包工具
2:带签名的APK包(也就是我们编写好的代码,需要生成一个正式的签名包)
正式签名包打包方式 :
Build - Generate Singed APK
填入秘钥信息,进入这里随便打一个包,先行“存放起来”
注意:
1.系统有32位与64位的区别,同时我们安装的python也有这个区别,所以看好系统,当然现在大多数都是64位操作系统~
2.这里打出来的签名包,可以是任意平台也可以是自己单独搞一个通用的签名包
安装流程:
勾选 Add Pythpn 3.5 to PATH
打开 Windows 系统自带的cmd,输入 python
成功图
失败图
如安装失败,请尝试以下解决办法 :
1.重新安装Python环境,记得勾选Add Python 3.5 to PATH
2.如果方法1还是不行,那我们需要去环境变量里面,配置python的环境变量即可,想快速解决环境变量百度即可。
使用流程:
1.按照地址1下载好之后,如下图所示
2.进行解压,描述如下
3.进入meituan\AndroidMultiChannelBuildTool-master\PythonTool
4.导入签名包,执行python程序,生成output开头的文件夹
5.进入output文件夹,查看我们已生成的所有渠道签名包
渠道名配置
进入PythonTool-info目录下找到channel.txt文件
- 根据自己需求配置所需渠道
- 根据自己需求配置所需渠道
注意:
- 解压之后在执行python程序!不要在压缩包内一直操作!!!
常见问题
注意事项:
不要把签名文件丢失
影响:
如果签名文件丢失,公司发布应用时只能重新进行签名,这样会导致
1.用户安装时必须先卸载才能成功安装
2.应用市场上的排行就会从0开始了因为这里的美团多渠道打包只能适用于V1版本的签名包!!!如果打签名包的时候默认同时勾选V1、V2且没有使用多渠道打包,那么在部分平台会有以下错误提示:
所以,个人还是推荐使用V1打包方式。因为稳定,所以放心。
前不久美图技术点评也实现了V2版本包的功能,想了解的请移步:新一代美团快速打包。集成起来会相对复杂一些,在一些讲究效率和快速开发的团队,正常使用V1签名包和上面的美团打包方式,依旧可以快速高效满足开发需求保证产出以及安全。
同样一个版本号的2个渠道包,比如先装了360,那么SharedPreferences存的就是360了。这时再用xiaomi渠道的去覆盖安装,那么读出来的渠道号还是360的。不知道博主对这个问题怎么看,还是去掉sp缓存,就保留内存和包中读取?
看你个人的使用场景吧 一般来说 渠道使用无非是统计升级渠道、根据相应渠道变化样式、上报崩溃信息携带渠道。 针对1:统计不怎么需要特别情况,你说的这种情况我们也考虑过,但一般用户大多不会这么折腾,也就QA这么玩。 针对2:使用flavor来解决了。而不是判断渠道。早期适配魅族手机也是不管渠道,只看是不是魅族手机 针对3:这个印象也不大,如果是某渠道包崩溃,少这几个也不会影响 综上,我们选择不再读取。 当然,如果你有其他使用场景,考量之后觉得要精确,可以每次读包,缓存到内存中。当时我是感觉没有太大必要,才写成这样
打包时会遇到的最常见的问题(报 MissingTranslation )
方式一:直接设定 string.xml文件内的resources的attribute
<?xml version="1.0" encoding="utf-8" ?> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> </resources>
方式二:在string 里加attribute translatable=”false”:
<string name="hello_world" translatable="false">你好</string>
方式三:File–>Setting–>Editor下的Inspections–>Android Lint 下的 Incomplete translation勾选去掉
(不是很推荐,这是在google上找到的一种方法,试了一下不可以)
优缺点
- 优点
1.打包方式速度非常快,眨眼之间就可打完所有渠道的包
- 缺点(个人感觉短时间不会发生这些情况)
1.google如果哪天更改打包规则,使得在META-INF中建立空文件还需要重新打包,这种方式将不可用
2.一些不法的渠道商很容易通过工具修改渠道,如果一个渠道商,通过网络劫持和篡改渠道的组合方式来获取暴利,对于程序开
发者来说可能会存在着巨大的经济损失
3.apk用的是java那一套签名,放在META-INF文件夹里的文件原则上是不参与签名的。如果Google修改了apk的签名规则, 这
一套可能就不适用了
4.这个方案没法解决不同渠道使用渠道自己SDK的问题,友盟的SDK提供了在代码中设置渠道的方式,所以再获取到渠道号后再
调用SDK相关设置渠道的方法就可以了
借鉴文章: