The great cleanup + fix proguard (#689)
* [app] Fix proguard * [core] Remove unused proguard rule Co-authored-by: LoveSy <shana@zju.edu.cn>
This commit is contained in:
parent
4035493602
commit
a6f0e666b8
|
|
@ -209,7 +209,7 @@ dependencies {
|
||||||
implementation("com.github.bumptech.glide:glide:$glideVersion")
|
implementation("com.github.bumptech.glide:glide:$glideVersion")
|
||||||
implementation("com.github.bumptech.glide:okhttp3-integration:$glideVersion")
|
implementation("com.github.bumptech.glide:okhttp3-integration:$glideVersion")
|
||||||
implementation("com.google.android.material:material:1.3.0")
|
implementation("com.google.android.material:material:1.3.0")
|
||||||
implementation("com.google.code.gson:gson:2.8.6")
|
implementation("com.google.code.gson:gson:2.8.7")
|
||||||
implementation("com.takisoft.preferencex:preferencex:1.1.0")
|
implementation("com.takisoft.preferencex:preferencex:1.1.0")
|
||||||
implementation("com.takisoft.preferencex:preferencex-colorpicker:1.1.0")
|
implementation("com.takisoft.preferencex:preferencex-colorpicker:1.1.0")
|
||||||
implementation("com.squareup.okhttp3:okhttp:$okhttpVersion")
|
implementation("com.squareup.okhttp3:okhttp:$okhttpVersion")
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,9 @@ import android.os.ParcelFileDescriptor;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.lsposed.lspd.Application;
|
import org.lsposed.lspd.models.Application;
|
||||||
|
import org.lsposed.lspd.models.UserInfo;
|
||||||
import org.lsposed.lspd.utils.ParceledListSlice;
|
import org.lsposed.lspd.utils.ParceledListSlice;
|
||||||
import org.lsposed.lspd.utils.UserInfo;
|
|
||||||
import org.lsposed.manager.adapters.ScopeAdapter;
|
import org.lsposed.manager.adapters.ScopeAdapter;
|
||||||
import org.lsposed.manager.receivers.LSPManagerServiceClient;
|
import org.lsposed.manager.receivers.LSPManagerServiceClient;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ import com.bumptech.glide.request.transition.Transition;
|
||||||
import com.google.android.material.checkbox.MaterialCheckBox;
|
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
import org.lsposed.lspd.Application;
|
import org.lsposed.lspd.models.Application;
|
||||||
import org.lsposed.manager.App;
|
import org.lsposed.manager.App;
|
||||||
import org.lsposed.manager.BuildConfig;
|
import org.lsposed.manager.BuildConfig;
|
||||||
import org.lsposed.manager.ConfigManager;
|
import org.lsposed.manager.ConfigManager;
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,10 @@ import android.os.IBinder;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
|
||||||
import org.lsposed.lspd.Application;
|
|
||||||
import org.lsposed.lspd.ILSPManagerService;
|
import org.lsposed.lspd.ILSPManagerService;
|
||||||
|
import org.lsposed.lspd.models.Application;
|
||||||
|
import org.lsposed.lspd.models.UserInfo;
|
||||||
import org.lsposed.lspd.utils.ParceledListSlice;
|
import org.lsposed.lspd.utils.ParceledListSlice;
|
||||||
import org.lsposed.lspd.utils.UserInfo;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ import com.google.android.material.checkbox.MaterialCheckBox;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.google.android.material.tabs.TabLayoutMediator;
|
import com.google.android.material.tabs.TabLayoutMediator;
|
||||||
|
|
||||||
import org.lsposed.lspd.utils.UserInfo;
|
import org.lsposed.lspd.models.UserInfo;
|
||||||
import org.lsposed.manager.ConfigManager;
|
import org.lsposed.manager.ConfigManager;
|
||||||
import org.lsposed.manager.R;
|
import org.lsposed.manager.R;
|
||||||
import org.lsposed.manager.adapters.AppHelper;
|
import org.lsposed.manager.adapters.AppHelper;
|
||||||
|
|
|
||||||
|
|
@ -164,9 +164,7 @@ public class RepoItemActivity extends BaseActivity implements RepoLoader.Listene
|
||||||
@Override
|
@Override
|
||||||
public void onThrowable(Throwable t) {
|
public void onThrowable(Throwable t) {
|
||||||
if (releaseAdapter != null) {
|
if (releaseAdapter != null) {
|
||||||
runOnUiThread(() -> {
|
runOnUiThread(() -> releaseAdapter.loadItems());
|
||||||
releaseAdapter.loadItems();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
|
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
|
||||||
Snackbar.make(binding.snackbar, getString(R.string.repo_load_failed, t.getLocalizedMessage()), Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(binding.snackbar, getString(R.string.repo_load_failed, t.getLocalizedMessage()), Snackbar.LENGTH_SHORT).show();
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ val verName: String by rootProject.extra
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("dev.rikka.ndk:riru:${moduleMinRiruVersionName}")
|
implementation("dev.rikka.ndk:riru:${moduleMinRiruVersionName}")
|
||||||
implementation("dev.rikka.ndk.thirdparty:cxx:1.1.0")
|
implementation("dev.rikka.ndk.thirdparty:cxx:1.1.0")
|
||||||
implementation("com.android.tools.build:apksig:4.2.1")
|
implementation("com.android.tools.build:apksig:7.0.0-beta01")
|
||||||
implementation("org.apache.commons:commons-lang3:3.12.0")
|
implementation("org.apache.commons:commons-lang3:3.12.0")
|
||||||
implementation("de.upb.cs.swt:axml:2.1.1")
|
implementation("de.upb.cs.swt:axml:2.1.1")
|
||||||
compileOnly(project(":hiddenapi-stubs"))
|
compileOnly(project(":hiddenapi-stubs"))
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@
|
||||||
public static void forkAndSpecializePost(java.lang.String, java.lang.String, android.os.IBinder);
|
public static void forkAndSpecializePost(java.lang.String, java.lang.String, android.os.IBinder);
|
||||||
public static void main(java.lang.String[]);
|
public static void main(java.lang.String[]);
|
||||||
}
|
}
|
||||||
-keepnames class org.lsposed.lspd.hooker.HandleBindAppHooker
|
|
||||||
-keepclasseswithmembers,includedescriptorclasses class * {
|
-keepclasseswithmembers,includedescriptorclasses class * {
|
||||||
native <methods>;
|
native <methods>;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,26 +20,15 @@
|
||||||
|
|
||||||
package org.lsposed.lspd.hooker;
|
package org.lsposed.lspd.hooker;
|
||||||
|
|
||||||
import static org.lsposed.lspd.config.LSPApplicationServiceClient.serviceClient;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
import android.app.ContextImpl;
|
|
||||||
import android.app.LoadedApk;
|
import android.app.LoadedApk;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.res.CompatibilityInfo;
|
import android.content.res.CompatibilityInfo;
|
||||||
import android.content.res.XResources;
|
import android.content.res.XResources;
|
||||||
import android.os.IBinder;
|
|
||||||
|
|
||||||
import org.lsposed.lspd.util.Hookers;
|
import org.lsposed.lspd.util.Hookers;
|
||||||
import org.lsposed.lspd.util.MetaDataReader;
|
|
||||||
import org.lsposed.lspd.util.Utils;
|
import org.lsposed.lspd.util.Utils;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import de.robv.android.xposed.XC_MethodHook;
|
import de.robv.android.xposed.XC_MethodHook;
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
import de.robv.android.xposed.XposedHelpers;
|
||||||
import de.robv.android.xposed.XposedInit;
|
import de.robv.android.xposed.XposedInit;
|
||||||
|
|
@ -77,45 +66,6 @@ public class HandleBindAppHooker extends XC_MethodHook {
|
||||||
|
|
||||||
String processName = (String) XposedHelpers.getObjectField(bindData, "processName");
|
String processName = (String) XposedHelpers.getObjectField(bindData, "processName");
|
||||||
|
|
||||||
|
|
||||||
IBinder moduleBinder = serviceClient.requestModuleBinder();
|
|
||||||
boolean isModule = moduleBinder != null;
|
|
||||||
int xposedminversion = -1;
|
|
||||||
boolean xposedsharedprefs = false;
|
|
||||||
try {
|
|
||||||
if (isModule) {
|
|
||||||
Map<String, Object> metaData = MetaDataReader.getMetaData(new File(appInfo.sourceDir));
|
|
||||||
Object minVersionRaw = metaData.get("xposedminversion");
|
|
||||||
if (minVersionRaw instanceof Integer) {
|
|
||||||
xposedminversion = (Integer) minVersionRaw;
|
|
||||||
} else if (minVersionRaw instanceof String) {
|
|
||||||
xposedminversion = MetaDataReader.extractIntPart((String) minVersionRaw);
|
|
||||||
}
|
|
||||||
xposedsharedprefs = metaData.containsKey("xposedsharedprefs");
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException | IOException e) {
|
|
||||||
Hookers.logE("ApkParser fails", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isModule && (xposedminversion > 92 || xposedsharedprefs)) {
|
|
||||||
Utils.logW("New modules detected, hook preferences");
|
|
||||||
XposedHelpers.findAndHookMethod(ContextImpl.class, "checkMode", int.class, new XC_MethodHook() {
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@SuppressLint("WorldReadableFiles")
|
|
||||||
@Override
|
|
||||||
protected void afterHookedMethod(MethodHookParam param) {
|
|
||||||
if (((int) param.args[0] & Context.MODE_WORLD_READABLE) != 0) {
|
|
||||||
param.setThrowable(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
XposedHelpers.findAndHookMethod(ContextImpl.class, "getPreferencesDir", new XC_MethodHook() {
|
|
||||||
@Override
|
|
||||||
protected void afterHookedMethod(MethodHookParam param) {
|
|
||||||
param.setResult(new File(serviceClient.getPrefsPath(appInfo.packageName)));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
LoadedApkGetCLHooker hook = new LoadedApkGetCLHooker(loadedApk, reportedPackageName,
|
LoadedApkGetCLHooker hook = new LoadedApkGetCLHooker(loadedApk, reportedPackageName,
|
||||||
processName, true);
|
processName, true);
|
||||||
hook.setUnhook(XposedHelpers.findAndHookMethod(
|
hook.setUnhook(XposedHelpers.findAndHookMethod(
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,15 @@ import android.os.IBinder;
|
||||||
|
|
||||||
import org.lsposed.lspd.util.Hookers;
|
import org.lsposed.lspd.util.Hookers;
|
||||||
import org.lsposed.lspd.util.InstallerVerifier;
|
import org.lsposed.lspd.util.InstallerVerifier;
|
||||||
|
import org.lsposed.lspd.util.MetaDataReader;
|
||||||
|
import org.lsposed.lspd.util.Utils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import de.robv.android.xposed.XC_MethodHook;
|
import de.robv.android.xposed.XC_MethodHook;
|
||||||
|
import de.robv.android.xposed.XC_MethodReplacement;
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
import de.robv.android.xposed.XposedHelpers;
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage;
|
import de.robv.android.xposed.callbacks.XC_LoadPackage;
|
||||||
|
|
@ -50,7 +57,7 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
|
protected void afterHookedMethod(MethodHookParam param) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
|
@ -78,6 +85,11 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
|
||||||
lpparam.appInfo = loadedApk.getApplicationInfo();
|
lpparam.appInfo = loadedApk.getApplicationInfo();
|
||||||
lpparam.isFirstApplication = this.isFirstApplication;
|
lpparam.isFirstApplication = this.isFirstApplication;
|
||||||
|
|
||||||
|
IBinder moduleBinder = serviceClient.requestModuleBinder();
|
||||||
|
if (moduleBinder != null) {
|
||||||
|
hookNewXSP(lpparam);
|
||||||
|
}
|
||||||
|
|
||||||
IBinder binder = loadedApk.getApplicationInfo() != null ? serviceClient.requestManagerBinder(loadedApk.getApplicationInfo().packageName) : null;
|
IBinder binder = loadedApk.getApplicationInfo() != null ? serviceClient.requestManagerBinder(loadedApk.getApplicationInfo().packageName) : null;
|
||||||
if (binder != null) {
|
if (binder != null) {
|
||||||
if (InstallerVerifier.verifyInstallerSignature(loadedApk.getApplicationInfo())) {
|
if (InstallerVerifier.verifyInstallerSignature(loadedApk.getApplicationInfo())) {
|
||||||
|
|
@ -98,11 +110,42 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void hookNewXSP(XC_LoadPackage.LoadPackageParam lpparam) {
|
||||||
|
int xposedminversion = -1;
|
||||||
|
boolean xposedsharedprefs = false;
|
||||||
|
try {
|
||||||
|
Map<String, Object> metaData = MetaDataReader.getMetaData(new File(lpparam.appInfo.sourceDir));
|
||||||
|
Object minVersionRaw = metaData.get("xposedminversion");
|
||||||
|
if (minVersionRaw instanceof Integer) {
|
||||||
|
xposedminversion = (Integer) minVersionRaw;
|
||||||
|
} else if (minVersionRaw instanceof String) {
|
||||||
|
xposedminversion = MetaDataReader.extractIntPart((String) minVersionRaw);
|
||||||
|
}
|
||||||
|
xposedsharedprefs = metaData.containsKey("xposedsharedprefs");
|
||||||
|
} catch (NumberFormatException | IOException e) {
|
||||||
|
Hookers.logE("ApkParser fails", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xposedminversion > 92 || xposedsharedprefs) {
|
||||||
|
Utils.logW("New modules detected, hook preferences");
|
||||||
|
XposedHelpers.findAndHookMethod("android.app.ContextImpl", lpparam.classLoader, "checkMode", int.class, new XC_MethodHook() {
|
||||||
|
@Override
|
||||||
|
protected void afterHookedMethod(MethodHookParam param) {
|
||||||
|
if (((int) param.args[0] & 1/*Context.MODE_WORLD_READABLE*/) != 0) {
|
||||||
|
param.setThrowable(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
XposedHelpers.findAndHookMethod("android.app.ContextImpl", lpparam.classLoader, "getPreferencesDir", new XC_MethodReplacement() {
|
||||||
|
@Override
|
||||||
|
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||||
|
return new File(serviceClient.getPrefsPath(lpparam.packageName));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setUnhook(Unhook unhook) {
|
public void setUnhook(Unhook unhook) {
|
||||||
this.unhook = unhook;
|
this.unhook = unhook;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Unhook getUnhook() {
|
|
||||||
return unhook;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,8 @@ import android.util.Pair;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import org.lsposed.lspd.Application;
|
|
||||||
import org.lsposed.lspd.BuildConfig;
|
import org.lsposed.lspd.BuildConfig;
|
||||||
|
import org.lsposed.lspd.models.Application;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
|
|
||||||
|
|
@ -34,11 +34,11 @@ import android.os.ParcelFileDescriptor;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.lsposed.lspd.Application;
|
|
||||||
import org.lsposed.lspd.BuildConfig;
|
import org.lsposed.lspd.BuildConfig;
|
||||||
import org.lsposed.lspd.ILSPManagerService;
|
import org.lsposed.lspd.ILSPManagerService;
|
||||||
|
import org.lsposed.lspd.models.Application;
|
||||||
|
import org.lsposed.lspd.models.UserInfo;
|
||||||
import org.lsposed.lspd.utils.ParceledListSlice;
|
import org.lsposed.lspd.utils.ParceledListSlice;
|
||||||
import org.lsposed.lspd.utils.UserInfo;
|
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,8 @@ import android.util.Pair;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import org.lsposed.lspd.Application;
|
|
||||||
import org.lsposed.lspd.BuildConfig;
|
import org.lsposed.lspd.BuildConfig;
|
||||||
|
import org.lsposed.lspd.models.Application;
|
||||||
import org.lsposed.lspd.util.InstallerVerifier;
|
import org.lsposed.lspd.util.InstallerVerifier;
|
||||||
import org.lsposed.lspd.utils.ParceledListSlice;
|
import org.lsposed.lspd.utils.ParceledListSlice;
|
||||||
|
|
||||||
|
|
@ -125,12 +125,6 @@ public class PackageService {
|
||||||
return pm.getApplicationInfo(packageName, flags, userId);
|
return pm.getApplicationInfo(packageName, flags, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String[] getPackagesForUid(int uid) throws RemoteException {
|
|
||||||
IPackageManager pm = getPackageManager();
|
|
||||||
if (pm == null) return new String[0];
|
|
||||||
return pm.getPackagesForUid(uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ParceledListSlice<PackageInfo> getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) throws RemoteException {
|
public static ParceledListSlice<PackageInfo> getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) throws RemoteException {
|
||||||
List<PackageInfo> res = new ArrayList<>();
|
List<PackageInfo> res = new ArrayList<>();
|
||||||
IPackageManager pm = getPackageManager();
|
IPackageManager pm = getPackageManager();
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
package org.lsposed.lspd.service;
|
package org.lsposed.lspd.service;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
|
|
||||||
|
|
@ -39,6 +40,7 @@ public class ParcelUtils {
|
||||||
|
|
||||||
private static Method obtainMethod;
|
private static Method obtainMethod;
|
||||||
|
|
||||||
|
@SuppressLint("SoonBlockedPrivateApi")
|
||||||
public static Parcel fromNativePointer(long ptr) {
|
public static Parcel fromNativePointer(long ptr) {
|
||||||
if (ptr == 0) return null;
|
if (ptr == 0) return null;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
/*
|
|
||||||
* This file is part of LSPosed.
|
|
||||||
*
|
|
||||||
* LSPosed is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* LSPosed is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with LSPosed. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2021 LSPosed Contributors
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.lsposed.lspd.service;
|
|
||||||
|
|
||||||
public class SystemService {
|
|
||||||
}
|
|
||||||
|
|
@ -51,10 +51,8 @@ public class ClassUtils {
|
||||||
private static boolean isInitialized(Class<?> clazz) {
|
private static boolean isInitialized(Class<?> clazz) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
return getClassStatus(clazz, true) >= 14;
|
return getClassStatus(clazz, true) >= 14;
|
||||||
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O_MR1) {
|
|
||||||
return getClassStatus(clazz, false) == 11;
|
|
||||||
} else {
|
} else {
|
||||||
return getClassStatus(clazz, false) == 10;
|
return getClassStatus(clazz, false) == 11;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ import de.robv.android.xposed.XposedHelpers;
|
||||||
public class InstallerVerifier {
|
public class InstallerVerifier {
|
||||||
public static boolean verifyInstallerSignature(ApplicationInfo appInfo) {
|
public static boolean verifyInstallerSignature(ApplicationInfo appInfo) {
|
||||||
ApkVerifier verifier = new ApkVerifier.Builder(new File(appInfo.sourceDir))
|
ApkVerifier verifier = new ApkVerifier.Builder(new File(appInfo.sourceDir))
|
||||||
.setMinCheckedPlatformVersion(26)
|
.setMinCheckedPlatformVersion(27)
|
||||||
.build();
|
.build();
|
||||||
try {
|
try {
|
||||||
ApkVerifier.Result result = verifier.verify();
|
ApkVerifier.Result result = verifier.verify();
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ public class ProxyClassLoader extends ClassLoader {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
|
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
|
||||||
Class clazz = null;
|
Class<?> clazz = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
clazz = mClassLoader.loadClass(name);
|
clazz = mClassLoader.loadClass(name);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package android.os;
|
package android.os;
|
||||||
|
|
||||||
public interface IPowerManager extends IInterface {
|
public interface IPowerManager extends IInterface {
|
||||||
void reboot(boolean confirm, String reason, boolean wait);
|
void reboot(boolean confirm, String reason, boolean wait) throws RemoteException;
|
||||||
|
|
||||||
abstract class Stub extends Binder implements IPowerManager {
|
abstract class Stub extends Binder implements IPowerManager {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
# If you keep the line number information, uncomment this to
|
# If you keep the line number information, uncomment this to
|
||||||
# hide the original source file name.
|
# hide the original source file name.
|
||||||
#-renamesourcefileattribute SourceFile
|
#-renamesourcefileattribute SourceFile
|
||||||
-keepclasseswithmembers class org.lsposed.lspd.Application { *; }
|
-keepclasseswithmembers class org.lsposed.lspd.models.* { *; }
|
||||||
-keepclassmembers class * implements android.os.Parcelable {
|
-keepclassmembers class * implements android.os.Parcelable {
|
||||||
public static final ** CREATOR;
|
public static final ** CREATOR;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package org.lsposed.lspd;
|
package org.lsposed.lspd;
|
||||||
|
|
||||||
import org.lsposed.lspd.utils.ParceledListSlice;
|
import org.lsposed.lspd.utils.ParceledListSlice;
|
||||||
import org.lsposed.lspd.utils.UserInfo;
|
import org.lsposed.lspd.models.UserInfo;
|
||||||
import org.lsposed.lspd.Application;
|
import org.lsposed.lspd.models.Application;
|
||||||
|
|
||||||
|
|
||||||
interface ILSPManagerService {
|
interface ILSPManagerService {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspd;
|
package org.lsposed.lspd.models;
|
||||||
|
|
||||||
parcelable Application {
|
parcelable Application {
|
||||||
String packageName;
|
String packageName;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspd.utils;
|
package org.lsposed.lspd.models;
|
||||||
|
|
||||||
parcelable UserInfo {
|
parcelable UserInfo {
|
||||||
int id;
|
int id;
|
||||||
Loading…
Reference in New Issue