大家都知道Android apk包都是zip压缩包,修改里面的任意文件都会破坏原先的签名。
但是最进公司多了个需求,就是从CP那儿拿包分给渠道,但是CP不会给每个渠道都从新打渠道包。(因为好多小渠道)
那就需要我们这边给包做些修改,这样我们这儿可以做到分渠道下发。当然不能修改原包的签名咯。
然后呢,各种尝试。
1、在apk里添加空目录,目录名做为渠道号。
这样确实可以做到,也不会破坏原包签名。但是遍历apk目录再找出渠道貌似麻烦些。
2、之后想到了Apk包里的一个META-INF目录
这个目录是打上签名后生成的,存储着Apk签名信息。
然后就想到他只会检测其他目录文件的变化,自己的未必检测。
尝试了下在此目录里添加文件,ok了。原签名没有被破坏,成功添加了一个新文件。
之后在程序里读出文件里的信息就好:
private String getMetaInfoChannelID() {
String channel = "";
try {
InputStream channelStream = mContext.getClassLoader()
.getResourceAsStream("META-INF/test.dat");
if (channelStream != null) {
InputStreamReader is = new InputStreamReader(channelStream);
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(is);
String read = br.readLine();
while (read != null) {
sb.append(read);
read = br.readLine();
}
channel = sb.toString();
br.close();
is.close();
channelStream.close();
}
} catch (Exception e) {
MyLog.printLog(e);
}
if (!channel.equals("")) {
MyLog.printLog("meta-inf channel = " + channel);
}
return channel;
}
这样就ok了~