一、前言
正在搞IOS的微信支付和支付宝支付,焦头烂额之时,天上掉下来一个Android分包工具的需求,觉得还蛮有意思,其实之前一直想搞一个类似的东西,正好趁着这次机会实践一下。
[原文地址]
(http://blog.csdn.net/yang8456211/article/details/52513354 )
(先说清楚需求,这个分包工具要干什么)
从产品角度
拿到一个apk安装包,然后用这个包去生成n个包,这n个包需要有特定的标示,能够根据包的标示去收集信息,而且这个n个包彼此不能覆盖安装。
从技术角度
对于这个需求,关键点在于三个点
1. 怎么去生成n个包?
2. 怎么修改apk的标示?
3. 怎么使得这n个包不能覆盖安装?
二、Just do it
2.1 首先我们自己制作一个简单的apk包
这个apk包包含两个功能点:
- 获取一些包的基本信息,例如应用包名
- 获取一些Meta信息,用来区分我们所打的包
因为这篇文章主要在讲bash和apk打包,对于Android代码就不赘述了,贴出来参考。
(获取应用包名)
PackageInfo info = null;
try {
// 获取包名
info = this.getPackageManager()
.getPackageInfo(this.getPackageName(), 0);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 当前版本的包名
pgName = info.packageName;
(获取Meta信息)
PackageManager pm = this.getPackageManager();
ApplicationInfo appInfo = null;
try {
appInfo = pm.getApplicationInfo(this.getPackageName(),
PackageManager.GET_META_DATA);
} catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 读取meta的内容
msg.append(appInfo.metaData.getString("SDK_CHANNEL"));
这里我们读取了SDK_CHANNEL这个信息作为包的标示,需要在Android Manifest中配置好相关的Meta data。
<meta-data android:name="SDK_CHANNEL" android:value="天降正义" />
运行时截图
可以看到现在的包名是com.example.testmultipac,渠道是天降正义~
接下来我们就开始着手一个一个解决问题
三、开始处理我们的包
3.1 怎么去生成这个n个包?
想要生成多个包,必须涉及到需要把apk进行反编译,然后重新生成apk包的过程,因此我使用了apktool这个工具。
注:apktool 有1和2两个版本,两者语法有些许不同,在这里使用了apktool_2.1.0这个jar,当然你也可以使用apktool1;window可以直接调用apktool.bat的批处理,事实上也是调用了apktool.jar。
apktool指令:
解开apk包:
java -jar apktool d -f 输入的apk路径 -o 输出的文件夹路径
重新生成apk包:
java -jar apktool b 上一步解出的文件夹路径 -o 输出apk路径
注:这里使用的apktool2,因此有-o这个参数,apktool是没有的,请注意。
了解了apktool的指令后,我们便可以方便的实现apk的解包和组包,在组包的会后通过修改包的名称,就可以生成多个不同名的包了。
例如:
do_repac(){
outapk=$apkpacpath"/"$game_package_name".apk"
# apktool重新回包 以免apktoo

本文介绍了如何使用Bash脚本和相关工具(apktool, jarsigner)创建一个自动化Android分包工具。通过修改apk的包名、Meta信息并签名,确保生成的多个包不能覆盖安装。详细讲解了解包、修改标识、防止覆盖安装的步骤,并展示了脚本的两种调用模式和配置文件的读取方法。"
111946311,10542515,SteamVR自定义皮肤教程:DIY你的虚拟现实手柄,"['SteamVR', 'VR自定义', '虚拟现实', '手柄皮肤', '3D贴图']
最低0.47元/天 解锁文章
1180

被折叠的 条评论
为什么被折叠?



