Как зацепить версию пакета в 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)";
}
}