如何给apk重新签名
我们先来了解一下安卓的签名机制:
为什么要签名
1、发送者的身份认证:由于开发商可能通过使用相同的 Package Name 来混淆替换已经安装的程序,以此保证签名不同的包不被替换
2、保证信息传输的完整性:签名对于包中的每个文件进行处理,以此确保包中内容不被替换
3、防止交易中的抵赖发生:Market(应用市场)对软件的要求
给apk签名可以带来以下好处:
1、应用程序升级:能无缝升级到新的版本,必须要同一个证书进行签名并且包名称要相同。(如果证书不同,可能会被系统认为是不同的应用)
2、应用程序模块化:Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行(系统实际把他们作为一个单个的应用程序),此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块
3、代码或者数据共享:Android提供了基于签名的权限机制,那么一个应用程序就可以为另一个以相同证书签名的应用程序公开自己的功能。
签名的说明
1、应用程序都必须有数字证书:Android 系统不会安装一个没有数字证书的应用程序
2、Android 程序包使用的数字证书可以是自签名的:不需要一个权威的数字证书机构签名认证
3、使用一个合适的私钥生成的数字证书来给程序签名:如果要正式发布一个 Android 应用,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用 adt 插件或者 ant 工具生成的调试证书来发布。
数字证书都是有有效期的:Android 只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能
那我们如何去修改证书的签名呢:
1、删除apk包中的签名文件(删除tomcat.apk中的签名)
Linux:zip -d tomcat.apk META-INF/\*
windows:改成zip后缀解压后删除META-INF目录,再打包成apk。
2、创建key,需要用到keytool.exe (位于\Java\jdk1.*.*\bin目录下),Linux安装java后可以直接使用该命令
keytool -genkey -v -keystore android.keystore -alias tomcatlaodage -keyalg RSA -validity 1000
注:记住自己设的密码
相关说明:
-genkey 产生**
-alias android.keystore 别名 tomcatlaodage(别名可以和原名一致)
-keyalg RSA 使用RSA算法对签名加密
-validity 1000 有效期限1000天
-keystore android.keystore
3、使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),Linux安装java后可以直接使用该命令
命令格式:jarsigner -verbose -keystore [加密证书的位置] -signedjar [加密后生成的apk文件] [需要加密的apk文件] [证书别名]
eg:jarsigner -verbose -keystore android.keystore -signedjar tomcat1.apk tomcat.apk tomcatlaodage
更多APK签名机制详解见:https://www.jianshu.com/p/286d2b372334
查看证书中的信息:keytool -list -v -keystore android.keystore
至于为啥我今天要改apk的签名,我也不知道。