Android APP签名除了能够声明发布者的身份,另外还有一下两个作用
1.使用一些特殊的key签名,可以获取到不同的资源
android 的为我们提供了这4种key的测试key,他们位于android\build\target\product\security
我们已系统的platform 为例
在security目录下
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
该命令会生成platform.pem文件
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name androiddebugkey
该命令生成一个数据证书platform.p12
keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepassandroid
该命令生成我们需要的keystore文件
2.APP签名后,如果其他发布者使用相同名称的发布包由于签名不一样,该APK是无法覆盖你的APP的
下面介绍用android stdio为APP生成keystore
在开发工具上直接将APP安装到设备上是,开发工具会为APP签入一个DebugKey,但是当我们要正式发布一个APP时,必须要为该APP签入合适的签名,该签名主要用于声明作者身份,表明该APP是可信任的。
系统不会安装一个未签名的APP,签名证书不需要授权,APP开发者普遍都使用自己的证书签名,如开发者可以使用Android Stdio为自己的APP签名:
1.step 1
2.step 2
这里需要使用java SDK中的keytool命令
keytool -genkey -alias wiwide -keypass wiwide2016 -keyalg RSA -keysize 1024 -validity 365 -keystore c:\key\jimmy.keystore -storepass 123456 -dname CN=wiwide
在对话框中输入生成的keystore文件所在的目录,以及别名和秘钥
UID
今天编译调试一个APP的时候发现andio Stduio报SHARED_USER_INCOMPATIBLE的错误
研究了一下发现在AndroidManifest.xml中,将sharedUserId声明成了system的,临时把这个关掉就能调试了
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wiwide.jiang.wiplussettings"
android:sharedUserId="android.uid.system">
扩展了解一下sharedUserI
Android的每一个APP都会分配到一个自己的UID,前面说了android提供了四种key类型
在使用system类型的key时,还需要在android.mk中定义LOCAL_CERTIFICATE := platform这句表示该APP使用目标系统中的platform key就是上面提到的security目录中的platform.pk8和platform.x509.pem两个文件来签名,不过这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用。如果需要在第三方的系统中使用,需要有第三方的KEY