签名版本之间的区别 – V1(瓶签名)和V2(全APK签名),而在AndroidStudio中生成签名的apk?
请至lessselect一个在Android Studio 2.3中使用的签名版本
现在在Android Studio中生成已签名的apk文件的同时,在已签名的apk生成过程的最后一步显示了两个选项(CheckBox),分别是1. V1(Jar Signature)
和2. V2(Full APK Signature)
那么,在新的Android Studio更新中,这些V1(Jar Signature)和V2(Full APK Signature)之间有什么区别呢?
我应该使用哪一个(或两者)来为Play商店发行版签名?
另外,我收到错误安装parsing失败无证书安装apk时,我使用第二个选项。
它是Android 7.0中引入的一种新的签名机制,具有旨在使APK签名更安全的附加function。
这不是强制性的。 如果可能,您应该检查这两个checkbox,但如果新的V2签名机制给您带来问题,您可以省略它。
所以如果遇到问题,你可以不要选V2,但是如果可能的话应该检查一下。
在这里写道:“默认情况下,Android Studio 2.2和Android插件Gradle 2.2使用APK Signature Scheme v2和传统签名scheme(使用JAR签名)签名您的应用程序。
由于看起来这些新的checkbox与Android 2.3出现,我明白,我以前的Android Studio版本(至less2.2)确实签署了两个签名。 所以,继续像以前一样,我认为最好同时检查两个checkbox。
编辑2017年3月31日:提交了两个签名=>没有问题的应用程序的几个应用程序:)
我是否应该使用(或两者)签署apk游戏商店版本? 答案是YES 。
按照https://source.android.com/security/apksigning/v2.html#verification :
在Android 7.0中,APK可以根据APK签名schemev2(v2scheme)或JAR签名(v1scheme)进行validation。 旧平台忽略v2签名,只validationv1签名。
我试图通过检查V2(Full Apk签名)选项来生成构build。 然后,当我试图安装在7.0以下的设备发布版本,我无法安装生成的设备。
之后,我尝试通过检查版本checkbox和生成发布版本来构build。 然后能够安装构build。
我认为这是一个很好的答案。
APK签名schemev2validation
- find
APK Signing Block
并validation:-
APK Signing Block
两个大小字段包含相同的值。 -
ZIP Central Directory
紧接着ZIP End of Central Directory
logging的ZIP End of Central Directory
。 -
ZIP End of Central Directory
没有更多的数据。
-
- find
APK Signature Scheme v2 Block
的第一个APK Signature Scheme v2 Block
APK Signing Block
。 如果v2 Block存在,请继续步骤3.否则,使用v1scheme回退到validationAPK。 - 对于
APK Signature Scheme v2 Block
中的每个签名者:- 从签名中select最强支持的签名algorithmID。 强度sorting取决于每个实现/平台版本。
- 使用公钥validation签名中相应的签名和签名数据的签名。 (parsing签名数据现在是安全的。)
- validation摘要和签名中签名algorithmID的有序列表是否相同。 (这是为了防止签名剥离/添加。)
- 使用与签名algorithm使用的摘要algorithm相同的摘要algorithm计算APK内容的摘要。
- validation计算出的摘要与摘要中相应的摘要是否相同。
- validation证书的第一个证书的
SubjectPublicKeyInfo
是否与公钥相同。
- 如果至less有一个签名者被发现,并且步骤3对每个find的签名者都成功,则validation成功。
注意:如果在步骤3或步骤4中发生故障,则不得使用v1schemevalidationAPK。
JAR签名APKvalidation(v1scheme)
JAR签名APK是一个标准的签名JAR,它必须包含META-INF/MANIFEST.MF
列出的条目,并且所有条目必须由同一组签名者签名。 其完整性validation如下:
- 每个签名者都由
META-INF/<signer>.SF
和META-INF/<signer>.(RSA|DSA|EC)
JAR条目表示。 -
<signer>.(RSA|DSA|EC)
是带有SignedData结构的PKCS #7 CMS ContentInfo
,其签名通过<signer>.SF
文件进行validation。 -
<signer>.SF
文件包含META-INF/MANIFEST.MF
摘要和META-INF/MANIFEST.MF
的每个部分的摘要。MANIFEST.MF
的全文摘要已被validation。 如果失败,则会validation每个MANIFEST.MF
部分的摘要。 - 对于每个完整性保护的JAR条目,
META-INF/MANIFEST.MF
包含一个相应命名的部分,其中包含条目未压缩内容的摘要。 所有这些摘要都经过validation。 - 如果APK包含未在
MANIFEST.MF
列出的JAR条目并且不属于JAR签名,那么APKvalidation将失败。<signer>.(RSA|DSA|EC)
→<signer>.SF
→MANIFEST.MF
→每个完整性保护的JAR条目的内容。