修复framework代码之后,push编译好的framework.jar和相应的odex文件,发现开机失败,一直在android界面循环
而且不停打dismatch dep :
I/dalvikvm( 375): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
E/dalvikvm( 375): /system/framework/android.policy.jar odex has stale dependencies
I/dalvikvm( 375): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
D/dalvikvm( 375): Unable to process classpath element '/system/framework/android.policy.jar'
I/dalvikvm( 375): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
E/dalvikvm( 375): /system/framework/services.jar odex has stale dependencies
I/dalvikvm( 375): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
D/dalvikvm( 375): Unable to process classpath element '/system/framework/services.jar'
I/dalvikvm( 375): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
E/dalvikvm( 375): /system/framework/apache-xml.jar odex has stale dependencies
I/dalvikvm( 375): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
D/dalvikvm( 375): Unable to process classpath element '/system/framework/apache-xml.jar'
I/dalvikvm( 375): DexOpt: mismatch dep signature for '/system/framework/framework.odex'
E/dalvikvm( 375): /system/framework/filterfw.jar odex has stale dependencies
I/dalvikvm( 375): Zip is good, but no classes.dex inside, and no valid .odex file in the same directory
D/dalvikvm( 375): Unable to process classpath element '/system/framework/filterfw.jar'
E/JNIHelp ( 375): Native registration unable to find class 'com/android/server/Watchdog', aborting
F/libc ( 375): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
在源码中定位到错误地点(DexPrepare.cpp中)
if (len != storedStrLen ||
strcmp(cacheFileName, (const char*) ptr) != 0)
{
LOGI("DexOpt: mismatch dep name: '%s' vs. '%s'",
cacheFileName, ptr);
goto bail;
}
ptr += storedStrLen;
if (memcmp(signature, ptr, kSHA1DigestLen) != 0) {
LOGI("DexOpt: mismatch dep signature for '%s'", cacheFileName);
goto bail;
}
ptr += kSHA1DigestLen;
LOGV("DexOpt: dep match on '%s'", cacheFileName);
numDeps--;
看来是依赖签名匹配失败.
如此看来只有两种解决办法:
1.用make snod命令重新编译system.img,这样编译出来的system中的架包之间没有依赖
2.修改DexPrepare.cpp中的验证代码,直接跳过签名验证