1.使用公钥和私钥签名
i. 生成公钥
openssl genrsa -3 -out testkey.pem 2048
其中 -3 是算法的参数, 2048 是密钥长度, testkey.pem 是输出的文件
ii. 转成 x509 格式(含作者有效期等)
openssl req -new -x509 -key testkey.pem-out testkey.x509.pem -days 10000 -subj‘/C=US/ST=California/L=MountainView/O=Android/OU=Android/CN=Android/emailAddress=android@android.com’
iii. 生成私钥
openssl pkcs8 -in testkey.pem -topk8-outform DER -out testkey.pk8 -nocrypt
把的格式转换成 PKCS #8 ,这里指定了 -nocryp ,表示不加密,所以签名时不用输入密码
java -jar signapk.jar testkey.x509.pemtestkey.pk8 update.apk update_signed.apk
或者使用keystore
keytool -genkey -alias mic.keystore -keyalgRSA -validity 20000 –keystore mic2.keystore
-alias后跟的是别名这里是mic.keystore
-keyalg是加密方式这里是RSA
-validity是有效期这里是20000天
-keystore就是要生成的keystore的名称,这里是mic2.keystore
然后按回车首先提示输入密码:这个在答名时要用的要记住了哦
然后会确认你的密码
之后会依次叫你输入相关信息如姓名,组织单位等
之后就是输入mic2.keystore主密码(如果和keystore密码相同,按回车)我在这里设和keystore相同,之后你就会在bin目录下找到生成的mic2.store
接下来我们开始为apk文件签名了。
jarsigner -verbose -keystore mic2.keystore-signedjar mic_signed.apk MIC.apk mic 就可以生成签名的apk文件,这里输入文件MIC.apk,最终生成mic_signed.apk为Android签名后的APK执行文件。下面提示输入的密码和keytool输入的一样就行了,
重新签名
删掉META-INF目录下的CERT.SF和CERT.RSA两个文件(修改apk后缀为rar,删掉后再改为rar)
使用当前android系统(android系统可能不同)的platform密钥来重新给apk文件签名。
首先,找到密钥文件,在我的Android源码目录中的位置是"build\target\product\security",下面的platform.pk8和platform.x509.pem两个文件。
然后,用Android提供的SignApk工具来签名。
即使用:java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apkupdate_signed.apk
系统签名和系统权限
如果apk拥有和framework一样的签名(源码下编译使用LOACL_CERTIFICATE:=platform或者拷贝build/target/product/security/下的platform.pk8和platform.x509.pem)
则 安装进去 就拥有system权限
push进去,也有system权限
如果是普通apk,即没有framework签名,则安装进去没有system权限,push进去,拥有system权限
另外,不同手机的framework签名不一样,所以A手机源码下编译的apk,安装在A手机上有system权限,而安装在B手机上则没有System权限,push进去拥有System权限。