Android:无法在模拟器上安装发布版本;失败[INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]

时间:2012-01-10 07:01:30

标签: android

我可以在模拟器上安装调试版本:

ant debug install

但无法安装发布版本。我的步骤:

1. ant release
2. jarsigner -verbose -keystore ..\my-release-key.keystore bin\myapp-release-unsigned.apk mykey
3. ren bin\myapp-release-unsigned.apk bin\myapp-release-signed.apk
4. zipalign -v 4 myapp-release-signed.apk myapp-release.apk
5. adb install bin\myapp-release.apk

除了收到消息的最后一个步骤外,所有步骤都成功运行:

82 KB/s (388012 bytes in 4.613s)
        pkg: /data/local/tmp/myapp-release.apk
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]

我也尝试使用相同的结果ant installr而不是adb install bin\myapp-release.apk

编辑:我认为这与密钥有关,因为这是我在发布和调试版本之间可以看到的唯一区别。我使用以下方法生成密钥:

keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000

http://developer.android.com/guide/publishing/app-signing.html所述。我按http://developer.android.com/guide/developing/building/building-cmdline.html修改了ant.properties个文件,现在只执行ant release install(而不是上面的步骤),但仍遇到同样的问题。如果有人知道ant如何生成调试密钥,那么我可以按照相同的步骤生成我的发布密钥,看看是否能解决问题。

3 个答案:

答案 0 :(得分:11)

我遇到了同样的问题,因为我在AndroidManifest.xml文件中使用了一个字符串值,如下所示:

android:versionCode="@string/version_code"
android:versionName="@string/version_name"

strings.xml包含的地方:

<string name="version_code">3</string>
<string name="version_name">1.0</string>

versionCode应为整数。一旦我拿出那个@string引用,我就不再遇到这个错误了,应用程序编译好了,运行得很好:

android:versionCode="3"
android:versionName="1.0"

答案 1 :(得分:5)

解决方案:https://stackoverflow.com/a/8225017/147530
注:
1.我收到了一个INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION。我没有得到INSTALL_PARSE_FAILED_NO_CERTIFICATES
2.从cmd行运行adb logcat显示堆栈跟踪类似于Android signing with Ant中的堆栈跟踪:

W/PackageParser(   51): Exception reading /data/app/vmdl24231.tmp
W/PackageParser(   51): java.lang.SecurityException: META-INF/METALLIC.SF has in
valid digest for assets/myasset.xtx in /data/app/vmdl24231.tmp
W/PackageParser(   51):         at java.util.jar.JarVerifier.verifyCertificate(J
arVerifier.java:370)
W/PackageParser(   51):         at java.util.jar.JarVerifier.readCertificates(Ja
rVerifier.java:273)
W/PackageParser(   51):         at java.util.jar.JarFile.getInputStream(JarFile.
java:416)
W/PackageParser(   51):         at android.content.pm.PackageParser.loadCertific
ates(PackageParser.java:317)
W/PackageParser(   51):         at android.content.pm.PackageParser.collectCerti
ficates(PackageParser.java:479)
W/PackageParser(   51):         at com.android.server.PackageManagerService.inst
allPackageLI(PackageManagerService.java:4287)
W/PackageParser(   51):         at com.android.server.PackageManagerService.acce
ss$1600(PackageManagerService.java:109)
W/PackageParser(   51):         at com.android.server.PackageManagerService$5.ru
n(PackageManagerService.java:3779)
W/PackageParser(   51):         at android.os.Handler.handleCallback(Handler.jav
a:587)
W/PackageParser(   51):         at android.os.Handler.dispatchMessage(Handler.ja
va:92)
W/PackageParser(   51):         at android.os.Looper.loop(Looper.java:123)
W/PackageParser(   51):         at android.os.HandlerThread.run(HandlerThread.ja
va:60)

参考文献:
http://code.google.com/p/android/issues/detail?id=19567

答案 2 :(得分:1)

我遇到了同样的错误,但是当我在尝试将apk文件安装到手机上时查看logcat时,我看到了这些行:

  

11-10 11:28:26.971 20075 20085 D:Zip:未找到EOCD,   /data/local/tmp/myapp.apk是   不拉链

     

11-10 11:28:26.972 20075 20085 W zipro:打开存档时出错   /data/local/tmp/myapp.apk:   文件无效

     

11-10 11:28:26.972 20075 20085 D资产:无法打开Zip档案   '/data/local/tmp/myapp.apk'

     

11-10 11:28:26.972 20075 20085 W DefContainer:无法解析包   在/data/local/tmp/myapp.apk:   android.content.pm.PackageParser $ PackageParserException:失败   解析   /data/local/tmp/myapp.apk

another question中所述,原来apk文件已损坏(可能无法正确下载),所以我不得不再次下载,然后才能正常工作。