2012-01-10 114 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文件已損壞(可能沒有正確下載),所以我不得不重新下載,然後它的工作精細。

相關問題