3

我使用 DexClassloader 从 /data/data/packagename/ 加载 dex 文件,就像:

private static synchronized Boolean injectAboveEqualApiLevel14(
            String dexPath, String defaultDexOptPath, String nativeLibPath, String dummyClassName) {
        BaseDexClassLoader pathClassLoader = (BaseDexClassLoader) DexInjector.class.getClassLoader();
        DexClassLoader dexClassLoader = new DexClassLoader(dexPath, defaultDexOptPath, nativeLibPath, pathClassLoader);
        try {
            dexClassLoader.loadClass(dummyClassName);
            Object dexElements = combineArray(
                    getDexElements(getPathList(pathClassLoader)),
                    getDexElements(getPathList(dexClassLoader)));
            Object pathList = getPathList(pathClassLoader);
            setField(pathList, pathList.getClass(), "dexElements", dexElements);
        } catch (Throwable e) {
            LogTool.i(TAG, "Throwable: " + e.toString() + "\n" + e.getMessage() + "\n");
            e.printStackTrace();
            return false;
        }
        return true;
    }

它可以在大多数机器和系统上完美运行.......但是今天,一个用户反馈dex文件无法加载,,,这里是重要性错误日志:

12-03 15:19:12.725: E/dalvikvm(32068): waitpid failed: wanted 32099, got -1: No child processes
12-03 15:19:12.725: E/dalvikvm(32068): Unable to extract+optimize DEX from '/data/data/com.test.plugin/dex/classes1.dex', err: No child processes

手机信息:HTC 9060、Android 4.2.2、HTC Sense 5.0

这是一个奇怪的错误。这是完整的日志:

  12-03 15:19:12.725: E/dalvikvm(32068): waitpid failed: wanted 32099, got -1: No child processes
12-03 15:19:12.725: E/dalvikvm(32068): Unable to extract+optimize DEX from '/data/data/com.test.plugin/dex/classes1.dex', err: No child processes
12-03 15:19:12.725: E/System(32068): Unable to load dex file: /data/data/com.test.plugin/dex/classes1.dex
12-03 15:19:12.725: E/System(32068): java.io.IOException: unable to open DEX file
12-03 15:19:12.725: E/System(32068):    at dalvik.system.DexFile.openDexFile(Native Method)
12-03 15:19:12.725: E/System(32068):    at dalvik.system.DexFile.<init>(DexFile.java:109)
12-03 15:19:12.725: E/System(32068):    at dalvik.system.DexFile.loadDex(DexFile.java:149)
12-03 15:19:12.725: E/System(32068):    at dalvik.system.DexPathList.loadDexFile(DexPathList.java:251)
12-03 15:19:12.725: E/System(32068):    at dalvik.system.DexPathList.makeDexElements(DexPathList.java:210)
12-03 15:19:12.725: E/System(32068):    at dalvik.system.DexPathList.<init>(DexPathList.java:96)
12-03 15:19:12.725: E/System(32068):    at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:56)
12-03 15:19:12.725: E/System(32068):    at dalvik.system.DexClassLoader.<init>(DexClassLoader.java:57)
12-03 15:19:12.725: E/System(32068):    at com.test.plugin.main.a.a.d(ProGuard:153)
12-03 15:19:12.725: E/System(32068):    at com.test.plugin.main.a.a.a(ProGuard:46)
12-03 15:19:12.725: E/System(32068):    at com.test.plugin.main.b.a(ProGuard:41)
12-03 15:19:12.725: E/System(32068):    at com.test.plugin.main.c.a(ProGuard:104)
12-03 15:19:12.725: E/System(32068):    at com.test.plugin.main.c.a(ProGuard:79)
12-03 15:19:12.725: E/System(32068):    at com.test.plugin.main.c.a(ProGuard:69)
12-03 15:19:12.725: E/System(32068):    at com.test.plugin.main.e.run(ProGuard:74)
4

0 回答 0