您可以使用jarsigner 为您签名aar 库,您可以使用keytool 生成签名密钥。这两个工具都位于 Android Studio 附带的嵌入式 JDK 中。执行以下操作以签署您的库。
签名
使用密钥对生成密钥库。您需要提供证书字段:
keytool -genkeypair -alias aarsign -keypass mypassword -keystore aarsign.keystore -storepass mypassword -v
将生成的证书导出到 PEM 文件中:
keytool -exportcert -rfc -alias aarsign -file aarsign-public.pem -keystore aarsign.keystore -storepass mypassword -v
创建包含证书的密钥库:
keytool -importcert -alias aarsign -file aarsign-public.pem -keystore aarsign-public.keystore -storepass mypassword -v
签署图书馆:
jarsigner -keystore aarsign.keystore -storepass mypassword -keypass mypassword -signedjar lib-signed.aar -verbose lib.aar aarsign
验证
任何想要证明图书馆真实性的人都需要以可靠的方式获取您的证书(或带有它的密钥库),然后输入以下命令:
jarsigner -keystore aarsign-public.keystore -storepass mypassword -verify -verbose -certs lib-signed.aar aarsign
它会给出消息
jar verified.
带有一些关于证书过期和签名时间戳的警告。您可以通过创建更严格的证书来消除这些警告。请参阅keytool 和jarsigner 文档。
有两种方法可以确定您的库是否已被篡改:不匹配的摘要或不匹配的证书。如果有人从不同的源代码或使用不同的资源生成aar,则摘要将不匹配,jarsigner 将发出警告,例如:
jarsigner: java.lang.SecurityException: invalid SHA-256 signature file digest for <file>
而且,如果有人提供了与您自己不同的证书,jarsigner 将发出警告:
Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signed entries which are not signed by the specified alias(es).
This jar contains signed entries that are not signed by alias in this keystore.