2016-05-04 34 views
1

我按照这里和其他地方的说明创建签名的jar文件,当我尝试将签名的.apk安装到我的LG-D415上时,我仍然收到INSTALL_PARSE_FAILED_NO_CERTIFICATES。 如前所述,签名算法似乎与Java 6更好的工作,所以我卸载了比其他所有Java版本,并确保密钥工具和进行的jarsigner使用Java 6从adb安装INSTALL_PARSE_FAILED_NO_CERTIFICATES;使用Java 6,Android 5.0.2

keytool -genkey -v -keystore debug.keystore -alias TabletClient -keyalg RSA -keysize 2048 -validity 20000 
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore debug.keystore Release\TabletClient.apk TabletClient 
zipalign -v 4 Release\TabletClient.apk Release\TabletClientZ.apk 
adb install Release\TabletClientZ.apk 

亚行logcat显示:

W/PackageManager( 957): android.content.pm.PackageParser$PackageParserException: Failed to collect certificates from /data/app/vmdl272628750.tmp/base.apk 
W/PackageManager( 957):  at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1108) 
W/PackageManager( 957):  at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1035) 
W/PackageManager( 957):  at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:11848) 
W/PackageManager( 957):  at com.android.server.pm.PackageManagerService.access$2500(PackageManagerService.java:273) 
W/PackageManager( 957):  at com.android.server.pm.PackageManagerService$7.run(PackageManagerService.java:9770) 
W/PackageManager( 957):  at android.os.Handler.handleCallback(Handler.java:739) 
W/PackageManager( 957):  at android.os.Handler.dispatchMessage(Handler.java:95) 
W/PackageManager( 957):  at android.os.Looper.loop(Looper.java:135) 
W/PackageManager( 957):  at android.os.HandlerThread.run(HandlerThread.java:61) 
W/PackageManager( 957):  at com.android.server.ServiceThread.run(ServiceThread.java:46) 
W/PackageManager( 957): Caused by: java.lang.SecurityException: Can not recognize a critical extension 
W/PackageManager( 957):  at org.apache.harmony.security.utils.JarUtils.verifySignature(JarUtils.java:120) 
W/PackageManager( 957):  at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:346) 
W/PackageManager( 957):  at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:320) 
W/PackageManager( 957):  at java.util.jar.StrictJarFile.<init>(StrictJarFile.java:68) 
W/PackageManager( 957):  at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1050) 

任何想法?任何帮助将不胜感激。

回答

0

我找到了答案。 .apk正在作为adt版本的一部分进行签名,但使用了一个无效的密钥。出于某种原因,jarsigner步骤并未完全取代旧签名,或显示任何错误。所以当.apk安装在Android设备上时,它有一个坏钥匙的问题。 找到这个的诀窍是在运行jarsigner之前打开.apk文件作为zip文件,然后删除META-INF目录。然后jarsigner使用Android在.android目录中创建的关键字正确创建它。 一旦我意识到这一点,我可以通过更改adt命令来使用Android的密钥来解决问题。

+0

您能否粘贴最终解决问题的adt命令? – Tormod

+0

没关系,我的解决方案是添加_signingConfig signingConfigs.release_到我的磨损gradle发布buildType。 – Tormod

相关问题