APK将无法安装:DalvikVM无法优化它(字节交换和验证失败)

Jac*_*olt 7 optimization android install menu

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

  1. 首先,使用Eclipse和Android插件将应用程序安装到新创建的2.3.3模拟器中.
  2. 如上所述,使用Eclipse在先前版本的2.3.3和2.2仿真器上安装了较新版本的应用程序.
  3. 我甚至尝试在启动模拟器时单击"擦除用户数据"复选框.
  4. 在HTC G2上安装了较新版本的应用程序,每晚运行CyanogenMod 7.1(2.3.5).
  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
Run Code Online (Sandbox Code Playgroud)

我尝试的第一件事是更改"无效名称" - "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>
Run Code Online (Sandbox Code Playgroud)

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

小智 0

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

即,相同的二进制文件是否可以在更高 API 版本的 Android 上工作?(如果是,那么很可能是方法太多造成的问题)

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