Как зацепить версию пакета в Xposed?

Как я могу получить пакет versionName а также versionCode в пределах IXposedHookLoadPackage.handleLoadPackage функция, прежде чем приложение было инициализировано? Я пытался использовать AndroidAppHelper.currentApplication(), но это возвращает null,

1 ответ

Вот код, который я использую (идея из этого поста). Возвращает строку в формате versionName (versionCode),

private static String getPackageVersion(XC_LoadPackage.LoadPackageParam lpparam) {
    try {
        Class<?> parserCls = XposedHelpers.findClass("android.content.pm.PackageParser", lpparam.classLoader);
        Object parser = parserCls.newInstance();
        File apkPath = new File(lpparam.appInfo.sourceDir);
        Object pkg = XposedHelpers.callMethod(parser, "parsePackage", apkPath, 0);
        String versionName = (String)XposedHelpers.getObjectField(pkg, "mVersionName");
        int versionCode = XposedHelpers.getIntField(pkg, "mVersionCode");
        return String.format("%s (%d)", versionName, versionCode);
    } catch (Throwable e) {
        return "(unknown)";
    }
}
Другие вопросы по тегам