Java 修改Android框架后Dep签名不匹配
我在Android框架(Android 4.2)中修改了PackageManagerService.java中的一些代码。生成并启动emulator后,它会报告以下错误:Java 修改Android框架后Dep签名不匹配,java,android,android-emulator,android-source,Java,Android,Android Emulator,Android Source,我在Android框架(Android 4.2)中修改了PackageManagerService.java中的一些代码。生成并启动emulator后,它会报告以下错误: 10-05 08:20:34.213: I/dalvikvm(575): DexOpt: mismatch dep signature for '/system/framework/core.odex' 10-05 08:20:34.213: E/dalvikvm(575): /system/app/PackageInstal
10-05 08:20:34.213: I/dalvikvm(575): DexOpt: mismatch dep signature for '/system/framework/core.odex'
10-05 08:20:34.213: E/dalvikvm(575): /system/app/PackageInstaller.apk odex has stale dependencies
10-05 08:20:34.213: E/dalvikvm(575): odex source not available -- failing
10-05 08:20:34.223: W/PackageManager(575): StaleDexCacheError when reading apk: /system/app/PackageInstaller.apk
10-05 08:20:34.223: W/PackageManager(575): dalvik.system.StaleDexCacheError: /system/app/PackageInstaller.apk
10-05 08:20:34.223: W/PackageManager(575): at dalvik.system.DexFile.isDexOptNeeded(Native Method)
10-05 08:20:34.223: W/PackageManager(575): at com.android.server.pm.PackageManagerService.performDexOptLI(PackageManagerService.java:3375)
10-05 08:20:34.223: W/PackageManager(575): at com.android.server.pm.PackageManagerService.scanPackageLI(PackageManagerService.java:3960)
10-05 08:20:34.223: W/PackageManager(575): at com.android.server.pm.PackageManagerService.scanPackageLI(PackageManagerService.java:3238)
10-05 08:20:34.223: W/PackageManager(575): at com.android.server.pm.PackageManagerService.scanDirLI(PackageManagerService.java:3017)
10-05 08:20:34.223: W/PackageManager(575): at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:1058)
10-05 08:20:34.223: W/PackageManager(575): at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:837)
10-05 08:20:34.223: W/PackageManager(575): at com.android.server.ServerThread.run(SystemServer.java:177)
如果我删除这些代码行,它就会工作。我曾经在安卓2.3上工作,安卓2.3(姜饼)中仍然有签名检查,但在修改姜饼的框架后,它将永远不会报告此类错误。这是为什么?我认为在定制ROM的构建和闪存过程中,您不会清理数据和缓存图像。在本例中,在这些图像中,存储了旧版本的
odexed core.jar
,在引导过程中,Android尝试将新版本与旧版本进行比较。因此,由于您做了一些修改,签名是不同的。我认为在定制ROM的构建和闪存过程中,您不会清理数据和缓存图像。在本例中,在这些图像中,存储了旧版本的odexed core.jar
,在引导过程中,Android尝试将新版本与旧版本进行比较。因此,当您做了一些修改后,签名就不同了。我最终通过显式运行make droidcore
解决了这个问题。我最终通过显式运行make droidcore
解决了这个问题
if (memcmp(signature, ptr, kSHA1DigestLen) != 0) {
LOGI("DexOpt: mismatch dep signature for '%s'", cacheFileName);
goto bail;
}