我可以在模拟器上安装调试版本:
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如何生成调试密钥,那么我可以按照相同的步骤生成我的发布密钥,看看是否能解决问题。
答案 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文件已损坏(可能无法正确下载),所以我不得不再次下载,然后才能正常工作。