Android多渠道打包(二):友盟多渠道打包

来源:互联网 发布:护肤品真假查询软件 编辑:程序博客网 时间:2024/05/20 05:25

本章将介绍umeng的多渠道打包方法


Android多渠道打包(一):基础多渠道打包
Android多渠道打包(二):友盟多渠道打包
Android多渠道打包(三):美团多渠道打包
Android多渠道打包(四):360多渠道打包
Android多渠道打包(五):360多渠道打包+
Android多渠道打包(六):maven&gradle
Android多渠道打包(七):系列总结及展望


来源

该方法是友盟几年前公布的多渠道打包方式,并且在github开源了打包工具,友盟多渠道打包方式经历了多次迭代,主要有两种方式,一种是通过反编译apk修改渠道信息,另一种是通过AXML解析器编辑修改渠道信息。

原理

  • 第一种方法:
    通过ApkTool进行解包,然后修改AndroidManifest中修改渠道标示,最后再通过ApkTool进行打包、签名。

  • 第二种方法:
    使用AXML解析器axmleditor.jar,拥有很弱的编辑功能,工程中用来编辑二进制格式的 AndroidManifest.xml 文件.

实现

  • 第一步 apktool解包apk

apktool是一个逆向工程工具,可以用它解码(decode)并修改apk中的资源。接下来详细介绍如何使用apktool生成渠道包。

在Android多渠道打包(一)介绍过,同样需要在AndroidManifest.xml文件中定义元素,并在应用启动的时候读取清单文件中的渠道号。打包时,只需构建一次生成一个apk,然后在该apk的基础上生成其他渠道包即可。

首先,使用apktool decode应用程序,在终端中输入如下命令:

apktool d your_unsigned.apk build

解包后生成如下图片的文件

  • 第二步 使用python脚本修改AndroidManifest.xml中的渠道号

AndroidManifest.xml文件内容

<manifest ...>    <application ...>        <meta-data            android:name="CHANNEL_NAME"            android:value="channel" />        ...    </application></manifest>

python脚本

import redef replace_channel(channel, manifest):    pattern = r'(<meta-data\s+android:name="CHANNEL_NAME"\s+android:value=")(\S+)("\s+/>)'    replacement = r"\g<1>channel\g<3>".format(channel=channel1)    return re.sub(pattern, replacement, manifest)

或者使用AXML解析器直接编辑修改AndroidManifest.xml中的渠道号

  • 第三步 使用apktool重新构建未签名的apk

apktool b build your_unsigned_apk

  • 第四步 使用jarsigner重新签名apk

jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore your_keystore_path -storepass your_storepass -signedjar your_signed_apk, your_unsigned_apk, your_alias

  • 另在代码中集成,比如友盟sdk
MobclickAgent. startWithConfigure(UMAnalyticsConfig config)UMAnalyticsConfig(Context context, String appkey, String channelId)UMAnalyticsConfig(Context context, String appkey, String channelId, EScenarioType eType)UMAnalyticsConfig(Context context, String appkey, String channelId, EScenarioType eType,Boolean isCrashEnable)

官方说明

  • 最近更新

友盟本次更新最大的改变是放弃了 V2.x 版本中通过 Apktool 反编译apk文件打包的方式,这种打包方式会对开发的apk文件做出大幅度的修改,可能会产生许多不兼容的问题,比如对jar包中包含资源的情况无法支持,对包含 .so 文件的apk兼容性也不好,而且在打包时 AndroidManifest.xml 文件中的特殊标签会丢失。为了解决这些问题减少对开发者apk文件的修改, 我们决定放弃这种方式,而采用直接编辑二进制的AndroidManifest.xml 文件的方式。这种方式只会修改 AndroidManifest.xml 文件,对于apk包中的资源文件和代码文件都不会做任何改变。如果打包不成功,生成的apk文件有问题,在测试阶段也可以快速发现,因为修改只会影响AndroidManifest.xml 相关的少量的设置。

  • 工具使用

axmleditor.jar 一个AXML解析器,拥有很弱的编辑功能,工程中用来编辑二进制格式的 AndroidManifest.xml 文件.
JarSigner.jar 给 Apk 签名, SignApk.jar 文件是我们修改过的 apk 签名工具,实现了和 ADT 中一样的签名方式.
这些java工具都是使用java7编译的,如果您还在使用java 1.6 请留下issue。
DotNetZip 解压缩和压缩文件使用的是DotNetZip(Ionic.Zip.dll), 运行源码需要加入这个库.

优缺点

对比Android多渠道打包(一)大大节省了构建时间,因为该方法只需构建一次,然后通过脚本修改渠道并签名就可。
但是对于三位数以上的渠道还是有点力不从心,另外该方法需要解压缩、压缩、重签名耗费时间较多,重签名可能会导致apk包在运行时有兼容性问题。

引用

友盟github


1 0
原创粉丝点击