关于android的程序签名
2010-11-23 15:52
316 查看
我以前在做android杂志时候遇到一个需求,要求是开发人员开发完第一版本杂志后,后面的版本只需要通过工具改变文字内容和图片重新签名就可以出第二个版本,不用重新改源码进行编译打包。我把所有可能改变的资源都放在assets 目录下,在程序中通过名字来获取资源,这样就不用重新编译了,但是签名呢?怎样通过工具来程序签名呢?
一: 生成未签名的apk包.
把res, resources.arsc, classes.dex, AndroidMainfest.xml, assets等资源打包成apk。 apk 是采用的zip压缩方式,但是资源中图片和音乐是不压缩的,也就是图片和音乐要保持原大小。
代码
执行完signApk后签名完成,可以安装应用程序了,呵呵。
源代码:SignApkUtil.zip
一: 生成未签名的apk包.
把res, resources.arsc, classes.dex, AndroidMainfest.xml, assets等资源打包成apk。 apk 是采用的zip压缩方式,但是资源中图片和音乐是不压缩的,也就是图片和音乐要保持原大小。
代码
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后签名完成,可以安装应用程序了,呵呵。
源代码:SignApkUtil.zip
相关文章推荐
- 关于android的程序签名
- 关于Android应用apk的程序签名
- 关于android的程序签名
- 关于Android应用apk的程序签名
- 关于android的程序签名
- android利用数字证书对程序签名
- 关于coolpad8190Q连接计算机真机实测android程序
- 关于如何得到Android程序原始安装路径的贴
- 关于Android程序崩溃的一些记录
- CSDN上下载的一些关于Android程序调用Webservice运行不成功的问题
- 关于Android Stuido 代码混淆打包签名后,高德地图定位出不来
- Android 关于RSA 加密和签名的区别
- Eclipse+ADT中android程序签名打包导出详解
- android程序的ProGuard混淆及签名发布
- 关于Android连载(3)Android程序开发指南【转载】
- 关于打开酷狗就无法进行android程序调试的问题
- 关于导入Android程序提示:Unable to resolve target 'android-10'的问题
- 【export apk】android程序签名打包导出详解
- android程序如何签名和发布应用程序
- 关于Android签名打包应用不能选择v1和v2签名的问题