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

View File

@ -6,7 +6,7 @@ buildscript {
mavenCentral()
}
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'
}
}

View File

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