我可以在模拟器上安装调试版本:
ant debug install
Run Code Online (Sandbox Code Playgroud)
但我无法安装发布版本.我的步骤:
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
Run Code Online (Sandbox Code Playgroud)
除了我收到消息的最后一个步骤外,所有步骤都成功运行:
82 KB/s (388012 bytes in 4.613s)
pkg: /data/local/tmp/myapp-release.apk
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]
Run Code Online (Sandbox Code Playgroud)
我也尝试过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
Run Code Online (Sandbox Code Playgroud)
如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如何生成调试密钥,那么我可以按照相同的步骤生成我的发布密钥,看看是否能解决问题.
Max*_*org 11
我遇到了同样的问题,因为我在AndroidManifest.xml文件中使用了一个字符串值,如下所示:
android:versionCode="@string/version_code"
android:versionName="@string/version_name"
Run Code Online (Sandbox Code Playgroud)
其中strings.xml包含:
<string name="version_code">3</string>
<string name="version_name">1.0</string>
Run Code Online (Sandbox Code Playgroud)
versionCode应该是一个整数.一旦我拿出那个@string引用,我就不再遇到这个错误了,应用程序已编译并运行得很好:
android:versionCode="3"
android:versionName="1.0"
Run Code Online (Sandbox Code Playgroud)
解决方案:https://stackoverflow.com/a/8225017/147530
注意:
1.我收到了一个INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION.我没有得到INSTALL_PARSE_FAILED_NO_CERTIFICATES
2. adb logcat从cmd行运行显示堆栈跟踪类似于Android使用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)
Run Code Online (Sandbox Code Playgroud)
参考文献:http:
//code.google.com/p/android/issues/detail?id = 19567
| 归档时间: |
|
| 查看次数: |
19889 次 |
| 最近记录: |