背景:
安卓安装完应用后,可以获取包的meta-inf目录下的文件吗?
在手机上安装完了应用后,然后打开应用,此时,应用里的SDK有没有办法取到应用包里的meta-inf文件?
为什么要这么做?
因为同一个应用包,需要往里面打不同的渠道ID。 然后又要保持签名一致。
这个时候需要往meta-inf里面写文件,因为这样不会影响到签名。
但是问题来了,如果一两个渠道还好,可以手工把渠道ID打到SDK里就可以,但是一旦渠道太多,应用太多的话,不可能手工打进去的,
所以这个时候就要通过SDK动态去取渠道ID, 但是渠道ID怎么动态打到包里面去呢? 只能通过META-INF。
但是把渠道ID打到META-INF了, 不知道怎么通过SDK去取到这个ID啊。。。
所以求求大神们帮帮忙解决下小弟这个难题 啊
方案: 具体化一下,将问题变更为,获取包的meta-inf目录下的文件channel_ID.txt的第三行
public static void initChannelContent(Context context) {
String cpaChannel = "";
ApplicationInfo appinfo = context.getApplicationInfo();
String sourceDir = appinfo.sourceDir;
ZipFile zipfile = null;
try {
zipfile = new ZipFile(sourceDir);
Enumeration<?> entries = zipfile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
String entryName = entry.getName();
if (entryName.contains("../")) {
break;
}
//取META-INF/channel_ID.txt文件的第三行,作为CPA_Channel_ID的值
if (entryName.startsWith("META-INF/channel_ID.txt")) { // xxx
// 表示要读取的文件名
// 利用ZipInputStream读取文件
long size = entry.getSize();
if (size > 0) {
BufferedReader br = new BufferedReader(new InputStreamReader(zipfile.getInputStream(entry)));
String line;
int lines = 0;
while ((line = br.readLine()) != null) { // 文件内容都在这里输出了,根据你的需要做改变
// System.out.println(line);
lines ++;
if(lines == 3){
AppConfig.CPA_Channel_ID = line.trim();
break;
}
//cpaChannel += line;
}
br.close();
}
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}