你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:
1.公司开发一个新的app,如何创建一个应用签名?
2.为了安全性,Android系统不想使用Google给的原生签名,如何定制系统签名?
这篇博客介SEO靠我绍了如何制作签名文件,首先介绍Android开发中使用到的签名文件类型,然后介绍系统签名如何制作,最后介绍不同IDE用到的签名文件如何制作。
目录
一、Android的签名文件有三种类型,分别在以下情况使SEO靠我用
1. jks: 用于Android Studio编译
2. keystore: 用于Eclipse编译
3. pk8/x509.pem : 用于Android系统的编译
二、制作pk8/x509SEO靠我.pem格式系统签名文件
1.准备环境
2.制作过程
3.使用自定义签名
4.检查自定义签名
三、制作jks格式的签名文件
四、制作keystore格式的签名文件
全称为Java key store,jks也是Android Studio中创建签名文件的格式
最早开发Android的时候的签名文件,目前开发Android都使用AS,而AS也兼容keystore.
这个是系统的签名文件SEO靠我,同样也可以给APK签名
需要在linux系统中,且有编译Android源码的环境
1)生成签名文件
要对Android系统进行签名,SEO靠我需要生成四种类型的key文件:
a) releasekeyb) mediac) sharedd) platform我们就拿releasekey 为例简单介绍下生成过程
使用Android源码中自带的makSEO靠我e_key工具来生成签名,路径为development/tools/make_key
在Android系统源码根目录下,新建make_key_security目录,进入到该目录,执行下面的命令
../deSEO靠我velopment/tools/make_key releasekey /C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=AndrSEO靠我oid/emailAddress=android@android.com执行命令时都会提示输入密码,这时不要输入密码,直接按Enter健;你想想如果在编译Android系统过程中要你不断输入密码进行确SEO靠我认,你是不是会疯掉!!!如下就会在make_key_security目录中生成密钥对 releasekey.pk8 (私钥) / releasekey.x509.pem (公钥)
Jack:~/aospSEO靠我/make_key_security$ ../development/tools/make_key releasekey /C=US/ST=California/L=Mountain View/O=ASEO靠我ndroid/OU=Android/CN=Android/emailAddress=android@android.com Enter password for releasekey SEO靠我(blank for none; password will be visible): creating releasekey.pk8 with no password SEO靠我 Generating RSA private key, 2048 bit long modulus (2 primes) ..............................SEO靠我......................................................................+++++ ....+++++ SEO靠我 e is 65537 (0x010001) Cant load /home/ecarx/.rnd into RNG 139895179936192:error:24SEO靠我06F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:FilenameSEO靠我=/home/ecarx/.rndJack:~/aosp/make_key_security$ ls releasekey.pk8 releasekey.x509.pem同样步骤将命令SEO靠我中的releasekey换成 media/shared/platform,然后执行,生成的所有秘钥对如下:
Jack:~/aosp/make_key_security$ ls -l 总用SEO靠我量 40 -rw------- 1 ecarx ecarx 1217 8月 14 23:45 media.pk8 -rw-rw-r-- 1 ecarx ecarx 14SEO靠我64 8月 14 23:45 media.x509.pem -rw------- 1 ecarx ecarx 1218 8月 14 23:44 platform.pk8 SEO靠我 -rw-rw-r-- 1 ecarx ecarx 1464 8月 14 23:44 platform.x509.pem -rw------- 1 ecarx ecarx 1218 8SEO靠我月 14 23:30 releasekey.pk8 -rw-rw-r-- 1 ecarx ecarx 1464 8月 14 23:30 releasekey.x509.pem SEO靠我 -rw------- 1 ecarx ecarx 1217 8月 14 23:45 shared.pk8 -rw-rw-r-- 1 ecarx ecarx 1464 8月 14SEO靠我 23:45 shared.x509.pem2)介绍一下make_key的参数
../development/tools/make_keyreleasekey /C=US/ST=California/LSEO靠我=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com
这里要顺便介绍下make_key的参数。第SEO靠我一个参数是要生成key的名字,第二个参数是关于你公司的信息。key的名字很好理解,就是前面提到的4中类型的key,公司信息的参数比较多,它们的含义如下:
KeyDescriptionExampleCWhSEO靠我at is the two-letter country code for this unit?USSTWhat is the name of your State or Province?CalifSEO靠我orniaLWhat is the name of your City or Locality?Mountain ViewOWhat is the name of your organization?SEO靠我AndroidOUWhat is the name of your organizational unit?AndroidCNWhat is your first and last name?AndrSEO靠我oidemailAddressWhat is the email address?android@android.com1) 修改 /build/core/config.mk 中定义SEO靠我变量:
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey
2) 修改 /build/core/MakefSEO靠我ile 中定义变量:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_KEYSEO靠我S := release-keys
else
BUILD_KEYS := dev-keys
endif查看签名文件信息:
Jackchen:~/aosp/make_key_security$SEO靠我 keytool -printcert -file releasekey.x509.pem 所有者: EMAILADDRESS=android@android.com, CN=AndSEO靠我roid, OU=Android, O=Android, L=Mountain View, ST=California, C=US 发布者: EMAILADDRESS=android@SEO靠我android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US 序列号: 2cSEO靠我5386028cf9208120dcb735e63e6ce31e57faf7 生效时间: Sat Aug 14 23:30:08 CST 2021, 失效时间: Wed Dec 30 SEO靠我23:30:08 CST 2048 证书指纹:SHA1: 6A:72:69:63:9D:07:13:09:35:9C:22:31:6C:A1:C8:74:CF:FE:F1:8BSHA2SEO靠我56: 45:AF:80:A8:10:AD:80:C2:71:C9:97:8A:D6:CC:FA:D0:AB:69:BA:B3:CE:80:94:D5:D0:70:63:E8:71:B0:06:CE SEO靠我 签名算法名称: SHA256withRSA 主体公共密钥算法: 2048 位 RSA 密钥 版本: 3build.prop中可以查看到变量:
ro.buiSEO靠我ld.tags=release-keys1.用Android Studio生成签名文件
这个网上教材很多,我引用了两位博主的文章
在Android Studio创建keystoSEO靠我re签名文件_TinkTan的博客-CSDN博客_android studio 创建keystore
Android Studio生成keystore签名文件_安妍妍的博客-CSDN博客_androidSEO靠我 studio 生成签名文件
之前我会一直困惑为什么创建jks签名文件时要输入两套秘密(不是确认秘密哦),后来经过查阅资料和实操验证终于弄懂了,这里和大家分享以下:
你可以将jks理解为一个仓库,一个密钥SEO靠我仓库,其实keystore这个名字就很直观,访问这个仓库需要一个秘密; 这个仓库里面可以存放很多很多key,所以每一个key都需要有一个自己的名字alias,访问每个key都需要密码aliaspassSEO靠我wd,下面通过示意图说明:
2.从系统签名文件转化而来
1)获取android平台key
取源码目录build\target\product\security下platform.pk8 platform.xSEO靠我509.pem放到一个目录中2)生成platform.pem
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem3SEO靠我)生成pkcs12
openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -passwSEO靠我ord pass:<key_pwd> -name <key_alias>签名key的密码,下一步需要用到(对应pkcs12的密码)
<key_alias> 签名key的别名,下一步需要用到4)生成debSEO靠我ug.jks
keytool -importkeystore -deststorepass <store_pwd> -destkeystore <store_name> -srckeystore plaSEO靠我tform.p12 -srcstoretype PKCS12 -srcstorepass <key_pwd> -alias <key_alias>签名文件(jks/keystore)的密码;
签名文件(SEO靠我jks/keystore)名称;
签名key的密码;
签名key的别名;
以上步骤就生成了platform.jks就直接可以用于Android Studio签名了,用到的命令如下:openssl pkcs8SEO靠我 -inform DER -nocrypt -in platform.pk8 -out platform.pem openssl pkcs12 -export -in platformSEO靠我.x509.pem -inkey platform.pem -out platform.p12 -password pass:key_password -name key_alias SEO靠我keytool -importkeystore -deststorepass store_name -destkeystore debug.jks -srckeystore platform.p12 SEO靠我-srcstoretype PKCS12 -srcstorepass key_password -alias key_alias另外还将以上这些命令写成了一个脚本,只要将platform.pk8 plSEO靠我atform.x509.pem放到对应目录下,然后运行脚本,输入对应参数即可,下载连接
1.从系统签名文件转化而来
和制作jks的步骤相同
如果要查看生成的签名文件里面SEO靠我的签名信息,可以参考我的另外一篇博客
Android签名 (一) 查看签名信息
网站备案号:浙ICP备17034767号-2