我正在尝试部署一个简单的Android应用,它给了我一个INSTALL_FAILED_DEXOPT错误。当我检查logcat时,我得到以下内容:
W/dalvikvm( 5558): Invalid file flags in class <class from my app>;: 0012
那么“类中无效的文件标志”是什么意思,值0012是否与任何事情有关?我试过运行一些谷歌搜索,但没有提出任何东西;我找到的只是包含此行的错误报告,但没有解释出现了什么问题或如何修复它。
答案 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_FINAL
和ACC_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,但这些不适合“外部”类。