android - APK 不会安装 : DalvikVM cannot optimize it (Byte swap and verify fails)

标签 android optimization menu installation

当我尝试在以下条件下安装我的 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 错误?

最佳答案

不确定这是否相关,但这是否是由于 dex 输出文件对于您正在运行的 android 版本而言太大而导致的?

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

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

关于android - APK 不会安装 : DalvikVM cannot optimize it (Byte swap and verify fails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340619/

相关文章:

android - 写入SD卡

azure - Durandal SPA 使用构建部署命令中的优化器部署到 Azure 网站

css - 无法获取 css 列表以内联显示

Python 终端菜单?终端着色?终端进度显示?

android - 如何在另一个 Activity 发送的 Activity 中获取并显示 EXTRA_TEXT?

java - 从对话框到 Activity 的按钮位置

android - ScrollView 内的画廊 - 垂直滚动不起作用

java - 为什么当我在 System.out.println 语句之外调用 System.nanoTime() 时,我的程序运行得很快?

针对 Pagespeed 优化的 Apache Vhost 指令

menu - 在Electron中访问子菜单项