VCamera v2.0.3版本的 MD5 值为:0c69d90ea31aeb3cb9d1431fccc77864

以下内容为反编译后的 XposedInit.java 源代码,内容仅作参考


package de.robv.android.xposed;

import android.content.pm.ApplicationInfo;
import android.util.Log;
import dalvik.system.DexFile;
import dalvik.system.PathClassLoader;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public final class XposedInit {
    private static final String INSTANT_RUN_CLASS = "com.android.tools.fd.runtime.BootstrapApplication";
    private static final String TAG = "Xposed";

    private XposedInit() {
    }

    public static void loadModule(String str, ClassLoader classLoader) {
        ZipFile zipFile;
        Log.i("Xposed", "Loading modules from " + str);
        if (!new File(str).exists()) {
            Log.e("Xposed", "  File does not exist");
            return;
        }
        try {
            DexFile dexFile = new DexFile(str);
            if (dexFile.loadClass(INSTANT_RUN_CLASS, classLoader) != null) {
                Log.e("Xposed", "  Cannot load module, please disable \"Instant Run\" in Android Studio.");
                XposedHelpers.closeSilently(dexFile);
            } else if (dexFile.loadClass(XposedBridge.class.getName(), classLoader) != null) {
                Log.e("Xposed", "  Cannot load module:");
                Log.e("Xposed", "  The Xposed API classes are compiled into the module's APK.");
                Log.e("Xposed", "  This may cause strange issues and must be fixed by the module developer.");
                Log.e("Xposed", "  For details, see: http://api.xposed.info/using.html");
                XposedHelpers.closeSilently(dexFile);
            } else {
                XposedHelpers.closeSilently(dexFile);
                ZipFile zipFile2 = null;
                try {
                    zipFile = new ZipFile(str);
                } catch (IOException e) {
                    e = e;
                }
                try {
                    ZipEntry entry = zipFile.getEntry("assets/xposed_init");
                    if (entry == null) {
                        Log.e("Xposed", "  assets/xposed_init not found in the APK");
                        XposedHelpers.closeSilently(zipFile);
                        return;
                    }
                    InputStream inputStream = zipFile.getInputStream(entry);
                    PathClassLoader pathClassLoader = new PathClassLoader(str, XposedBridge.BOOTCLASSLOADER);
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                    while (true) {
                        try {
                            try {
                                String readLine = bufferedReader.readLine();
                                if (readLine == null) {
                                    break;
                                }
                                String trim = readLine.trim();
                                if (!trim.isEmpty() && !trim.startsWith("#")) {
                                    try {
                                        Log.i("Xposed", "  Loading class " + trim);
                                        Class<?> loadClass = pathClassLoader.loadClass(trim);
                                        if (!IXposedMod.class.isAssignableFrom(loadClass)) {
                                            Log.e("Xposed", "    This class doesn't implement any sub-interface of IXposedMod, skipping it");
                                        } else {
                                            Object newInstance = loadClass.newInstance();
                                            if (newInstance instanceof IXposedHookLoadPackage) {
                                                XposedBridge.hookLoadPackage(new IXposedHookLoadPackage.Wrapper((IXposedHookLoadPackage) newInstance));
                                            }
                                        }
                                    } catch (Throwable th) {
                                        Log.e("Xposed", "    Failed to load class " + trim, th);
                                    }
                                }
                            } catch (IOException e2) {
                                Log.e("Xposed", "  Failed to load module from " + str, e2);
                            }
                        } finally {
                            XposedHelpers.closeSilently(inputStream);
                            XposedHelpers.closeSilently(zipFile);
                        }
                    }
                } catch (IOException e3) {
                    e = e3;
                    zipFile2 = zipFile;
                    Log.e("Xposed", "  Cannot read assets/xposed_init in the APK", e);
                    XposedHelpers.closeSilently(zipFile2);
                }
            }
        } catch (IOException e4) {
            Log.e("Xposed", "  Cannot load module", e4);
        }
    }

    public static void onPackageLoad(String str, String str2, ApplicationInfo applicationInfo, boolean z, ClassLoader classLoader) {
        XC_LoadPackage.LoadPackageParam loadPackageParam = new XC_LoadPackage.LoadPackageParam(XposedBridge.sLoadedPackageCallbacks);
        loadPackageParam.packageName = str;
        loadPackageParam.processName = str2;
        loadPackageParam.appInfo = applicationInfo;
        loadPackageParam.isFirstApplication = z;
        loadPackageParam.classLoader = classLoader;
        XC_LoadPackage.callAll(loadPackageParam);
    }
}