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
- Android多渠道打包(二):友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- 友盟多渠道打包
- Android Studio 多渠道打包(二)
- android studio-友盟多渠道打包方式
- android studio 使用友盟多渠道打包
- Android Studio 友盟多渠道打包
- Android 友盟多渠道快速打包
- 友盟多渠道打包 Android Apk
- android studio 友盟多渠道打包
- *[Lintcode] Heapify 堆化
- 众数问题
- TRIGGER的上升和下降的检测简单的仿真
- Android 实现带指示器的自动轮播式ViewPager
- 数字货币算法
- Android多渠道打包(二):友盟多渠道打包
- 解惑 spring 嵌套事务
- mybatis association 映射:同文件中的使用
- 使用shell下载第三方网站的js和css文件
- No exception of type HibernateException can be thrown; an exception type must be a subclass of Thro
- MySQL 性能优化的最佳20多条经验分享
- Eclipse 中找不到 LocalBroadcastManager类
- Leetcode 301. Remove Invalid Parentheses
- SUMO文档009:高级教程(下)