Android进阶之路 - 美团多渠道打包全面讲解

通过 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相关设置渠道的方法就可以了

借鉴文章:

猜你喜欢

转载自blog.csdn.net/qq_20451879/article/details/80365417
今日推荐