關於Android apk簽名問題

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章