【问题标题】:APK won't install: DalvikVM cannot optimize it (Byte swap and verify fails)APK 无法安装:DalvikVM 无法优化(字节交换和验证失败)
【发布时间】:2011-11-12 12:39:25
【问题描述】:

当我尝试在以下条件下安装我的 Android 应用程序时,我收到了 INSTALL_FAILED_DEXOPT 错误(这似乎与此处提出的有关 INSTALL_FAILED_DEXOPT 的其他问题没有任何关系):

  1. 首先,使用 Eclipse 和 Android 插件将应用安装到新创建的 2.3.3 模拟器。
  2. 使用上述 Eclipse 在现有的 2.3.3 和 2.2 模拟器上安装较新版本的应用程序。
  3. 我什至尝试在启动模拟器时单击“擦除用户数据”复选框。
  4. 在运行 CyanogenMod 7.1 nightly (2.3.5) 的 HTC G2 上安装了较旧版本的应用程序的较新版本。
  5. 使用“adb -d uninstall com.jackcholt.reveal”从 G2 中删除了以前版本的应用,然后尝试使用“adb -d install Reveal3.apk”在 G2 上安装新版本

我每次尝试都会在 LogCat 中收到以下错误:

D/PackageParser(   75): Scanning package: /data/app/vmdl352595685.tmp
D/PackageManager(   75): Scanning package com.jackcholt.reveal
I/PackageManager(   75): Unpacking native libraries for /data/app/com.jackcholt.reveal-1.apk
D/installd(   35): DexInv: --- BEGIN '/data/app/com.jackcholt.reveal-1.apk' ---
E/dalvikvm(  378): Invalid name: 'menu_item_re‌index'
E/dalvikvm(  378): Trouble with item 282 @ offset 0x17dd8
E/dalvikvm(  378): Cross-item verify of section type 0004 failed
E/dalvikvm(  378): ERROR: Byte swap + verify failed
E/dalvikvm(  378): Optimization failed
W/installd(   35): DexInv: --- END '/data/app/com.jackcholt.reveal-1.apk' --- status=0xff00, process failed
E/installd(   35): dexopt failed on '/data/dalvik-cache/data@app@com.jackcholt.reveal-1.apk@classes.dex' res = 65280
W/PackageManager(   75): Package couldn't be installed in /data/app/com.jackcholt.reveal-1.apk

我尝试的第一件事是更改“无效名称”——“menu_item_index”。它位于菜单定义 XML 文件的末尾,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<menu android:id="@+id/shared_menu" xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:icon="@android:drawable/ic_menu_recent_history" 
        android:title="@string/menu_history" 
        android:id="@+id/menu_item_history"/>
    <item android:icon="@android:drawable/ic_input_get" 
        android:title="@string/menu_bookmark" 
        android:id="@+id/menu_item_bookmark"/>
    <item android:id="@+id/menu_item_previous" 
        android:icon="@drawable/previous_chapter" 
        android:title="@string/menu_previous"/>
    <item android:id="@+id/menu_item_next" 
        android:icon="@drawable/next_chapter" 
        android:title="@string/menu_next"/>
    <item android:icon="@android:drawable/ic_menu_set_as" 
        android:id="@+id/menu_item_download" 
        android:title="@string/menu_browser"/>
    <item android:icon="@android:drawable/ic_menu_preferences" 
        android:id="@+id/menu_item_settings" 
        android:title="@string/menu_settings"/>
    <item android:id="@+id/menu_item_note_browser" 
        android:title="@string/annot_brow" 
        android:icon="@android:drawable/ic_input_get"/>
    <item android:icon="@android:drawable/ic_menu_more" 
        android:title="@string/more" 
        android:id="@+id/menu_extra">
        <menu> 
            <item android:id="@+id/menu_item_download" 
                android:title="@string/menu_browser"/>
            <item android:id="@+id/menu_item_note_browser" 
                android:title="@string/annot_brow"/>
            <item android:title="@string/menu_help" 
                android:id="@+id/menu_item_help"/>
            <item android:title="@string/menu_refresh_library" 
                android:id="@+id/menu_item_refresh_lib"/>
            <item android:title="@string/menu_update" 
                android:id="@+id/menu_item_update"/>
            <item android:title="@string/reset" 
                android:id="@+id/menu_item_reset"/>
            <item android:title="@string/donate_menu" 
                android:id="@+id/menu_item_donate"/>
            <item android:title="@string/menu_license" 
                android:id="@+id/menu_item_license"/>
            <item android:id="@+id/menu_item_about" 
                android:title="@string/menu_about"/>
            <item android:id="@+id/menu_item_re‌index" 
                android:title="@string/reindex_books"/>
        </menu>
    </item>
</menu>

我需要做些什么来避免 INSTALL_FAILED_DEXOPT 错误?

【问题讨论】:

  • 这个问题你解决了吗?

标签: android optimization menu installation


【解决方案1】:

不确定这是否相关,但这可能是由于 dex 输出文件对于您正在运行的 android 版本来说太大而引起的吗?

即,相同的二进制文件是否适用于更高 API 版本的 android? (如果是,那么很可能是方法太多的问题)

关于 dexopt 失败还有很多其他线程,似乎唯一可以接受的答案是限制您使用的类的数量;你在用proguard吗?

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2017-03-19
    • 2014-12-03
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多