關於android的程序簽名

我以前在做android雜誌時候遇到一個需求,要求是開發人員開發完第一版本雜誌後,後面的版本只需要通過工具改變文字內容和圖片重新簽名就可以出第二個版本,不用重新改源碼進行編譯打包。我把所有可能改變的資源都放在assets 目錄下,在程序中通過名字來獲取資源,這樣就不用重新編譯了,但是簽名呢?怎樣通過工具來程序簽名呢?

一: 生成未簽名的apk包.

  把res, resources.arsc, classes.dex, AndroidMainfest.xml, assets等資源打包成apk。   apk 是採用的zip壓縮方式,但是資源中圖片和音樂是不壓縮的,也就是圖片和音樂要保持原大小。

 

代碼

 

 

二.  對apk包進行簽名.
看了博文;,下面是我的解決方法,希望有朋友用的着。
首先需要android自帶的私鑰 和公鑰testkey.zip
還有SignApk.java.

在signApk.java中的main(String []args)方法中 參數args這裏我們無法傳入,我們只有到程序中自己賦值。

 

代碼
複製代碼
public static void main(String[] args) {
2 args = new String[]{"d:/testkey.x509.pem","d:/testkey.pk8", "d:/lyl.apk", "d:/lyl1.apk"}; //第一個參數是公鑰,第二個參數是私鑰, 第三個參數是需要簽名的apk, 第四個參數是簽名後生成的apk
3
4 JarFile inputJar = null;
5 JarOutputStream outputJar = null;
6
7 try {
8 X509Certificate publicKey = readPublicKey(new File(args[0]));
9 PrivateKey privateKey = readPrivateKey(new File(args[1]));
10 inputJar = new JarFile(new File(args[2]), false); // Don't verify.
11 outputJar = new JarOutputStream(new FileOutputStream(args[3]));
12 outputJar.setLevel(9);
13
14 // MANIFEST.MF
15 Manifest manifest = addDigestsToManifest(inputJar);
16 manifest.getEntries().remove("META-INF/CERT.SF");
17 manifest.getEntries().remove("META-INF/CERT.RSA");
18 outputJar.putNextEntry(new JarEntry(JarFile.MANIFEST_NAME));
19 manifest.write(outputJar);
20
21 // CERT.SF
22 Signature signature = Signature.getInstance("SHA1withRSA");
23 signature.initSign(privateKey);
24 outputJar.putNextEntry(new JarEntry("META-INF/CERT.SF"));
25 writeSignatureFile(manifest,
26 new SignatureOutputStream(outputJar, signature));
27
28 // CERT.RSA
29 outputJar.putNextEntry(new JarEntry("META-INF/CERT.RSA"));
30 writeSignatureBlock(signature, publicKey, outputJar);
31
32 // Everything else
33 copyFiles(manifest, inputJar, outputJar);
34 } catch (Exception e) {
35 e.printStackTrace();
36 System.exit(1);
37 } finally {
38 try {
39 if (inputJar != null) inputJar.close();
40 if (outputJar != null) outputJar.close();
41 } catch (IOException e) {
42 e.printStackTrace();
43 System.exit(1);
44 }
45 }
46 }
複製代碼

執行完signApk後簽名完成,可以安裝應用程序了,呵呵。

原文: http://www.cnblogs.com/jeromeliu/archive/2010/11/23/1885244.html


發佈了26 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章