大家都知道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了~