前言
前面博文写了如何通过apktool工具实现apk二次打包,二次打包是实现了,但终究感觉一行一行的输入命令也是比较麻烦,当然我们可以使用bat脚本来简化操作。不过本人对脚本代码不太熟悉,对bat脚本的批处理和文件操作等也不太擅长,所以最终决定还是回归java,用我最擅长java代码来实现apk的二次打包,修改apk文件功能。
小程序(不是微信小程序)编写要点
- 小程序实现二次打包目的是给apk添加或修改渠道号
- 使用apktool工具进行拆包、打包
- 小程序编写思路:拆包-添加渠道号-打包-签名
按照上面要点,下面来一一实现我们的小程序
实现小程序前,我们首先需要生成一个原始apk,这里我通过AS随便新建一个项目运行生成一个apk,这个apk要在运行后在Application获取里获取apk的渠道号,并打印出来。这里我的思路是在Application里获取assets目录里的渠道文件,而这个渠道文件是在实现二次打包后添加的,这样我们就可以通过apk母包然后用自己的小程序二次打包进而实现apk的多渠道打包。
先看我们apk的Application代码:
public class AppApplication extends Application {
private static final String TAG = "AppApplication";
private ApplicationInfo appInfo;
private String channelName;
private int channelNum;
@Override
public void onCreate() {
super.onCreate();
String channelInfo = getChannelInfo(this);
Log.d("channelInfo",channelInfo);
}
private String getChannelInfo(Context context){
try {
InputStream in = context.getAssets().open("channel.txt");//获取渠道文件流
int size = in.available();//获取文件内容大小
byte[] buffer = new byte[size];
in.read(buffer);
in.close();
String channelInfo = new String(buffer,"utf-8");
String[] channelInfos = channelInfo.split("\n");
for (String info :channelInfos){
if (info.contains("channelName")){
channelName = info.substring("channelName=".length());
Log.d(TAG,"channelName:"+channelName);
}else if (info.contains("channelNum")){
channelNum = Integer.parseInt(info.substring(&