From 106aea6da8b152ae7291dd3b3adf92bfae50aeb9 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Tue, 25 May 2021 15:50:57 +0800 Subject: [PATCH] [core] Fix #674 (#675) --- .../lspd/service/ActivityManagerService.java | 5 +++++ .../org/lsposed/lspd/service/PackageService.java | 14 +++++++++----- .../main/java/android/app/IActivityManager.java | 5 +++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/service/ActivityManagerService.java b/core/src/main/java/org/lsposed/lspd/service/ActivityManagerService.java index 776fa6ca..8164763c 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ActivityManagerService.java +++ b/core/src/main/java/org/lsposed/lspd/service/ActivityManagerService.java @@ -98,6 +98,11 @@ public class ActivityManagerService { String requiredPermission, int userId, int flags) throws RemoteException { IActivityManager am = getActivityManager(); if (am == null || thread == null) return null; + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S || (Build.VERSION.SDK_INT == Build.VERSION_CODES.R && Build.VERSION.PREVIEW_SDK_INT != 0)) + return am.registerReceiverWithFeature(thread, callerPackage, callingFeatureId, "null", receiver, filter, requiredPermission, userId, flags); + } catch (Throwable ignored) { + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { return am.registerReceiverWithFeature(thread, callerPackage, callingFeatureId, receiver, filter, requiredPermission, userId, flags); } else { diff --git a/core/src/main/java/org/lsposed/lspd/service/PackageService.java b/core/src/main/java/org/lsposed/lspd/service/PackageService.java index 6d62deb6..72c2568d 100644 --- a/core/src/main/java/org/lsposed/lspd/service/PackageService.java +++ b/core/src/main/java/org/lsposed/lspd/service/PackageService.java @@ -299,13 +299,17 @@ public class PackageService { // Install manager IPackageInstaller installerService = pm.getPackageInstaller(); - PackageInstaller installer; + PackageInstaller installer = null; // S Preview if (Build.VERSION.SDK_INT > 30 || Build.VERSION.SDK_INT == 30 && Build.VERSION.PREVIEW_SDK_INT != 0) { - Constructor installerConstructor = PackageInstaller.class.getConstructor(IPackageInstaller.class, String.class, String.class, int.class); - installerConstructor.setAccessible(true); - installer = installerConstructor.newInstance(installerService, null, null, 0); - } else { + try { + Constructor installerConstructor = PackageInstaller.class.getConstructor(IPackageInstaller.class, String.class, String.class, int.class); + installerConstructor.setAccessible(true); + installer = installerConstructor.newInstance(installerService, null, null, 0); + } catch (Throwable ignored) { + } + } + if (installer == null) { Constructor installerConstructor = PackageInstaller.class.getConstructor(IPackageInstaller.class, String.class, int.class); installerConstructor.setAccessible(true); installer = installerConstructor.newInstance(installerService, null, 0); diff --git a/hiddenapi-stubs/src/main/java/android/app/IActivityManager.java b/hiddenapi-stubs/src/main/java/android/app/IActivityManager.java index 15bbf95f..6562390e 100644 --- a/hiddenapi-stubs/src/main/java/android/app/IActivityManager.java +++ b/hiddenapi-stubs/src/main/java/android/app/IActivityManager.java @@ -77,6 +77,11 @@ public interface IActivityManager extends IInterface { String callingFeatureId, IIntentReceiver receiver, IntentFilter filter, String requiredPermission, int userId, int flags) throws RemoteException; + @RequiresApi(31) + Intent registerReceiverWithFeature(IApplicationThread caller, String callerPackage, String callingFeatureId, + String receiverId, IIntentReceiver receiver, IntentFilter filter, + String requiredPermission, int userId, int flags) throws RemoteException; + int bindService(IApplicationThread caller, IBinder token, Intent service, String resolvedType, IServiceConnection connection, int flags, String callingPackage, int userId) throws RemoteException;