APK не будет установлен: DalvikVM не может его оптимизировать - PullRequest
7 голосов
/ 08 сентября 2011

Я получаю ошибку INSTALL_FAILED_DEXOPT (которая, похоже, не имеет никакого отношения к другим вопросам, которые были заданы здесь об INSTALL_FAILED_DEXOPT), когда я пытаюсь установить приложение для Android при следующих условиях:

  1. Сначала приложение устанавливается в только что созданный эмулятор 2.3.3 с использованием Eclipse и плагина Android.
  2. Более новая версия приложения установлена ​​поверх предыдущей версии на существующих эмуляторах 2.3.3 и 2.2 с использованием Eclipse, как указано выше.
  3. Я даже пытался установить флажок «Wipe User Data» при запуске эмуляторов.
  4. Более новая версия приложения установлена ​​поверх предыдущей версии на HTC G2, работающей CyanogenMod 7.1 ночью (2.3.5).
  5. Удалил предыдущую версию приложения из G2 с помощью «adb -d uninstall com.jackcholt.reveal», затем попытался установить новую версию на G2 с помощью «adb -d install Reveal3.apk»

Каждый раз, когда я пытался, я получал следующие ошибки в 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?

1 Ответ

0 голосов
/ 11 августа 2014

Не уверен, связано ли это с этим, но может ли это быть вызвано тем, что выходной файл dex слишком велик для версии Android, на которой вы работаете?

то есть, работает ли тот же двоичный файл на более высокой версии API для Android? (если да, то это, вероятно, вызвано проблемой слишком многих методов)

Есть множество других потоков вокруг сбоев dexopt, кажется, что единственный приемлемый ответ для этого - ограничить количество классов, которые вы используете; ты используешь proguard?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...