"类#34中的无效文件标志是什么?意思?

时间:2014-05-16 03:38:22

标签: android dalvik

我正在尝试部署一个简单的Android应用,它给了我一个INSTALL_FAILED_DEXOPT错误。当我检查logcat时,我得到以下内容:

W/dalvikvm( 5558): Invalid file flags in class <class from my app>;: 0012

那么“类中无效的文件标志”是什么意思,值0012是否与任何事情有关?我试过运行一些谷歌搜索,但没有提出任何东西;我找到的只是包含此行的错误报告,但没有解释出现了什么问题或如何修复它。

1 个答案:

答案 0 :(得分:1)

错误来自于此(dalvik / vm / oo / Class.cpp):

/*
 * Make sure the aren't any "bonus" flags set, since we use them for
 * runtime state.
 */
/* bits we can reasonably expect to see set in a DEX access flags field */
const uint32_t EXPECTED_FILE_FLAGS = (ACC_CLASS_MASK | CLASS_ISPREVERIFIED |
                                      CLASS_ISOPTIMIZED);
if ((pClassDef->accessFlags & ~EXPECTED_FILE_FLAGS) != 0) {
    ALOGW("Invalid file flags in class %s: %04x",
        descriptor, pClassDef->accessFlags);
    return NULL;
}

错误消息表明您的类已设置标志0x0012;这些是ACC_FINALACC_PRIVATE。在dalvik / libdex / DexFile.h中定义的ACC_CLASS_MASK不包括ACC_PRIVATE

ACC_CLASS_MASK =
    (ACC_PUBLIC | ACC_FINAL | ACC_INTERFACE | ACC_ABSTRACT
            | ACC_SYNTHETIC | ACC_ANNOTATION | ACC_ENUM),

ACC_INNER_CLASS_MASK包括private,protected和static,但这些不适合“外部”类。