Support Android 12
This commit is contained in:
parent
99c7f72665
commit
dc0c63e857
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue