2012-01-10 38 views
7

我能够安装调试建立到模拟器做:Android:无法安装发布版本到仿真器上;越来越失败[INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]

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所述。我修改了ant.properties文件,每http://developer.android.com/guide/developing/building/building-cmdline.html,现在只是做ant release install(而不是上述步骤),但仍遇到同样的问题。如果有人知道ant如何生成调试密钥,那么我可以按照相同的过程生成我的释放密钥,并查看是否可以解决问题。

+0

你有没有卸载你的调试版本的应用程序? – nandeesh 2012-01-10 07:05:19

+0

是的,我已经卸载了调试版本 – morpheus 2012-01-10 07:09:46

+0

只需安装未签名的apk。 – 2012-01-10 07:31:02

回答

5

解决方案:https://stackoverflow.com/a/8225017/147530
注:
1.我得到一个INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION。我没有Android signing with Ant得到INSTALL_PARSE_FAILED_NO_CERTIFICATES
2.运行CMD从线adb logcat表现出堆栈跟踪类似于:

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

11

我有同样的问题,因为我是用一个字符串值在我的AndroidManifest.xml文件中是这样的:

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

where string s.xml包含:

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

versionCode应该是一个整数。当我拿出那个@string参考我不再得到这个错误,应用程序编译并运行就好:

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

感谢,它的工作 – xnagyg 2015-04-01 13:45:56

+0

您可以将'versionCode'存储为整数:' 3'并引用为'@ integer/version_code' – 2017-01-03 11:01:25

1

我有同样的错误,但是当我在logcat的看着尝试安装apk文件到手机,我已经看到了这几行:

11月11日至10日:28:26.971 20075 20085 d:邮编:EOCD没有找到, /data/local/tmp/myapp.apk是 没有拉链

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

11月11日至10日:28:26.972 20075 20085 d的资产:未能打开Zip文件 “/数据/本地的/ tmp/MYAPP。APK”

十一月11日至10日:28:26.972 20075 20085W¯¯DefContainer:解析失败打包 在/data/local/tmp/myapp.apk: android.content.pm.PackageParser $ PackageParserException:无法 解析 /data/local/tmp/myapp.apk

正如another question提到的,原来apk文件已损坏(可能没有正确下载),所以我不得不重新下载,然后它的工作精细。

相关问题