Support Android 12

This commit is contained in:
Nullptr 2021-11-01 23:17:11 +08:00
parent 99c7f72665
commit dc0c63e857
3 changed files with 16 additions and 5 deletions

View File

@ -19,7 +19,6 @@ import android.os.IBinder;
import android.os.Parcel; import android.os.Parcel;
import android.os.RemoteException; import android.os.RemoteException;
import android.system.Os; import android.system.Os;
import android.util.ArrayMap;
import android.util.Log; import android.util.Log;
import com.google.gson.Gson; import com.google.gson.Gson;
@ -47,6 +46,7 @@ import java.nio.file.attribute.PosixFilePermissions;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodHook;
@ -62,6 +62,7 @@ public class LSPApplication extends ApplicationServiceClient {
private static final String TAG = "LSPatch"; private static final String TAG = "LSPatch";
private static ActivityThread activityThread; private static ActivityThread activityThread;
private static LoadedApk stubLoadedApk;
private static LoadedApk appLoadedApk; private static LoadedApk appLoadedApk;
private static PatchConfig config; private static PatchConfig config;
@ -109,6 +110,10 @@ public class LSPApplication extends ApplicationServiceClient {
// before forkPostCommon is invoke. Otherwise, you will get failure of XResources // before forkPostCommon is invoke. Otherwise, you will get failure of XResources
LSPLoader.initModules(appLoadedApk); LSPLoader.initModules(appLoadedApk);
Log.i(TAG, "Modules initialized"); Log.i(TAG, "Modules initialized");
switchClassLoader("mBaseClassLoader");
switchClassLoader("mDefaultClassLoader");
switchClassLoader("mClassLoader");
} catch (Throwable e) { } catch (Throwable e) {
Log.e(TAG, "Do hook", e); Log.e(TAG, "Do hook", e);
} }
@ -117,7 +122,8 @@ public class LSPApplication extends ApplicationServiceClient {
private static Context createLoadedApkWithContext() { private static Context createLoadedApkWithContext() {
try { try {
var mBoundApplication = XposedHelpers.getObjectField(activityThread, "mBoundApplication"); var mBoundApplication = XposedHelpers.getObjectField(activityThread, "mBoundApplication");
var stubLoadedApk = (LoadedApk) XposedHelpers.getObjectField(mBoundApplication, "info");
stubLoadedApk = (LoadedApk) XposedHelpers.getObjectField(mBoundApplication, "info");
var appInfo = (ApplicationInfo) XposedHelpers.getObjectField(mBoundApplication, "appInfo"); var appInfo = (ApplicationInfo) XposedHelpers.getObjectField(mBoundApplication, "appInfo");
var compatInfo = (CompatibilityInfo) XposedHelpers.getObjectField(mBoundApplication, "compatInfo"); var compatInfo = (CompatibilityInfo) XposedHelpers.getObjectField(mBoundApplication, "compatInfo");
var baseClassLoader = stubLoadedApk.getClassLoader(); var baseClassLoader = stubLoadedApk.getClassLoader();
@ -151,7 +157,7 @@ public class LSPApplication extends ApplicationServiceClient {
} }
} }
var mPackages = (ArrayMap<?, ?>) XposedHelpers.getObjectField(activityThread, "mPackages"); var mPackages = (Map<?, ?>) XposedHelpers.getObjectField(activityThread, "mPackages");
mPackages.remove(appInfo.packageName); mPackages.remove(appInfo.packageName);
appLoadedApk = activityThread.getPackageInfoNoCheck(appInfo, compatInfo); appLoadedApk = activityThread.getPackageInfoNoCheck(appInfo, compatInfo);
XposedHelpers.setObjectField(mBoundApplication, "info", appLoadedApk); XposedHelpers.setObjectField(mBoundApplication, "info", appLoadedApk);
@ -339,6 +345,11 @@ public class LSPApplication extends ApplicationServiceClient {
} }
} }
private static void switchClassLoader(String fieldName) {
var obj = XposedHelpers.getObjectField(appLoadedApk, fieldName);
XposedHelpers.setObjectField(stubLoadedApk, fieldName, obj);
}
@Override @Override
public IBinder requestModuleBinder(String name) { public IBinder requestModuleBinder(String name) {
return null; return null;

View File

@ -6,7 +6,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.1.0-alpha13' classpath 'com.android.tools.build:gradle:7.1.0-beta02'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31' classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31'
} }
} }

View File

@ -187,7 +187,7 @@ public class LSPatch {
} }
var entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry("key0", new KeyStore.PasswordProtection("123456".toCharArray())); var entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry("key0", new KeyStore.PasswordProtection("123456".toCharArray()));
new SigningExtension(SigningOptions.builder() new SigningExtension(SigningOptions.builder()
.setMinSdkVersion(27) .setMinSdkVersion(28)
.setV1SigningEnabled(v1) .setV1SigningEnabled(v1)
.setV2SigningEnabled(v2) .setV2SigningEnabled(v2)
.setCertificates((X509Certificate[]) entry.getCertificateChain()) .setCertificates((X509Certificate[]) entry.getCertificateChain())