Support Android 13 DP1 (#1666)

This commit is contained in:
LoveSy 2022-02-11 09:12:10 +08:00 committed by GitHub
parent 89713ce3cb
commit b0d1e7a2bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 42 additions and 12 deletions

View File

@ -10,7 +10,7 @@ A Riru module trying to provide an ART hooking framework which delivers consiste
## Supported Versions ## Supported Versions
Android 8.1 ~ 12, 12L Beta2 Android 8.1 ~ 12, 12L Beta3, 13 DP1
## Install ## Install

View File

@ -3,5 +3,5 @@ name=${api} - LSPosed
version=${versionName} (${versionCode}) version=${versionName} (${versionCode})
versionCode=${versionCode} versionCode=${versionCode}
author=${authorList} author=${authorList}
description=Another enhanced implementation of Xposed Framework. Supports Android 8.1 ~ 12, 12L Beta2. ${requirement}. description=Another enhanced implementation of Xposed Framework. Supports Android 8.1 ~ 12, 12L Beta3, 13 DP1. ${requirement}.
updateJson=${updateJson} updateJson=${updateJson}

View File

@ -107,6 +107,9 @@ public class PackageService {
public static PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException { public static PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException {
IPackageManager pm = getPackageManager(); IPackageManager pm = getPackageManager();
if (pm == null) return null; if (pm == null) return null;
if (Build.VERSION.SDK_INT + Build.VERSION.PREVIEW_SDK_INT > Build.VERSION_CODES.S) {
return pm.getPackageInfo(packageName, (long) flags, userId);
}
return pm.getPackageInfo(packageName, flags, userId); return pm.getPackageInfo(packageName, flags, userId);
} }
@ -116,7 +119,7 @@ public class PackageService {
Map<Integer, PackageInfo> res = new HashMap<>(); Map<Integer, PackageInfo> res = new HashMap<>();
if (pm == null) return res; if (pm == null) return res;
for (var user : UserService.getUsers()) { for (var user : UserService.getUsers()) {
var info = pm.getPackageInfo(packageName, flags, user.id); var info = getPackageInfo(packageName, flags, user.id);
if (info != null && info.applicationInfo != null) res.put(user.id, info); if (info != null && info.applicationInfo != null) res.put(user.id, info);
} }
return res; return res;
@ -125,6 +128,9 @@ public class PackageService {
public static ApplicationInfo getApplicationInfo(String packageName, int flags, int userId) throws RemoteException { public static ApplicationInfo getApplicationInfo(String packageName, int flags, int userId) throws RemoteException {
IPackageManager pm = getPackageManager(); IPackageManager pm = getPackageManager();
if (pm == null) return null; if (pm == null) return null;
if (Build.VERSION.SDK_INT + Build.VERSION.PREVIEW_SDK_INT > Build.VERSION_CODES.S) {
return pm.getApplicationInfo(packageName, (long) flags, userId);
}
return pm.getApplicationInfo(packageName, flags, userId); return pm.getApplicationInfo(packageName, flags, userId);
} }
@ -135,7 +141,8 @@ public class PackageService {
if (pm == null) return ParceledListSlice.emptyList(); if (pm == null) return ParceledListSlice.emptyList();
for (var user : UserService.getUsers()) { for (var user : UserService.getUsers()) {
// in case pkginfo of other users in primary user // in case pkginfo of other users in primary user
res.addAll(pm.getInstalledPackages(flags, user.id).getList().parallelStream() res.addAll((Build.VERSION.SDK_INT + Build.VERSION.PREVIEW_SDK_INT > Build.VERSION_CODES.S ? pm.getInstalledPackages((long) flags, user.id) : pm.getInstalledPackages(flags, user.id))
.getList().parallelStream()
.filter(info -> info.applicationInfo != null && info.applicationInfo.uid / PER_USER_RANGE == user.id) .filter(info -> info.applicationInfo != null && info.applicationInfo.uid / PER_USER_RANGE == user.id)
.filter(info -> { .filter(info -> {
try { try {
@ -196,27 +203,27 @@ public class PackageService {
if (pm == null) return null; if (pm == null) return null;
PackageInfo pkgInfo; PackageInfo pkgInfo;
try { try {
pkgInfo = pm.getPackageInfo(packageName, flags | PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES | PackageManager.GET_RECEIVERS | PackageManager.GET_PROVIDERS, userId); pkgInfo = getPackageInfo(packageName, flags | PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES | PackageManager.GET_RECEIVERS | PackageManager.GET_PROVIDERS, userId);
} catch (Exception e) { } catch (Exception e) {
pkgInfo = pm.getPackageInfo(packageName, flags, userId); pkgInfo = getPackageInfo(packageName, flags, userId);
if (pkgInfo == null) return null; if (pkgInfo == null) return null;
try { try {
pkgInfo.activities = pm.getPackageInfo(packageName, flags | PackageManager.GET_ACTIVITIES, userId).activities; pkgInfo.activities = getPackageInfo(packageName, flags | PackageManager.GET_ACTIVITIES, userId).activities;
} catch (Exception ignored) { } catch (Exception ignored) {
} }
try { try {
pkgInfo.services = pm.getPackageInfo(packageName, flags | PackageManager.GET_SERVICES, userId).services; pkgInfo.services = getPackageInfo(packageName, flags | PackageManager.GET_SERVICES, userId).services;
} catch (Exception ignored) { } catch (Exception ignored) {
} }
try { try {
pkgInfo.receivers = pm.getPackageInfo(packageName, flags | PackageManager.GET_RECEIVERS, userId).receivers; pkgInfo.receivers = getPackageInfo(packageName, flags | PackageManager.GET_RECEIVERS, userId).receivers;
} catch (Exception ignored) { } catch (Exception ignored) {
} }
try { try {
pkgInfo.providers = pm.getPackageInfo(packageName, flags | PackageManager.GET_PROVIDERS, userId).providers; pkgInfo.providers = getPackageInfo(packageName, flags | PackageManager.GET_PROVIDERS, userId).providers;
} catch (Exception ignored) { } catch (Exception ignored) {
} }
@ -279,7 +286,7 @@ public class PackageService {
public static ParceledListSlice<ResolveInfo> queryIntentActivities(Intent intent, String resolvedType, int flags, int userId) throws RemoteException { public static ParceledListSlice<ResolveInfo> queryIntentActivities(Intent intent, String resolvedType, int flags, int userId) throws RemoteException {
IPackageManager pm = getPackageManager(); IPackageManager pm = getPackageManager();
if (pm == null) return null; if (pm == null) return null;
return new ParceledListSlice<>(pm.queryIntentActivities(intent, resolvedType, flags, userId).getList()); return new ParceledListSlice<>((Build.VERSION.SDK_INT + Build.VERSION.PREVIEW_SDK_INT > Build.VERSION_CODES.S ? pm.queryIntentActivities(intent, resolvedType, (long) flags, userId) : pm.queryIntentActivities(intent, resolvedType, flags, userId)).getList());
} }
public static Intent getLaunchIntentForPackage(String packageName) throws RemoteException { public static Intent getLaunchIntentForPackage(String packageName) throws RemoteException {

View File

@ -19,20 +19,39 @@ public interface IPackageManager extends IInterface {
ApplicationInfo getApplicationInfo(String packageName, int flags, int userId) ApplicationInfo getApplicationInfo(String packageName, int flags, int userId)
throws RemoteException; throws RemoteException;
@RequiresApi(33)
ApplicationInfo getApplicationInfo(String packageName, long flags, int userId)
throws RemoteException;
PackageInfo getPackageInfo(String packageName, int flags, int userId) PackageInfo getPackageInfo(String packageName, int flags, int userId)
throws RemoteException; throws RemoteException;
@RequiresApi(33)
PackageInfo getPackageInfo(String packageName, long flags, int userId)
throws RemoteException;
int getPackageUid(String packageName, int flags, int userId) throws RemoteException; int getPackageUid(String packageName, int flags, int userId) throws RemoteException;
@RequiresApi(33)
int getPackageUid(String packageName, long flags, int userId) throws RemoteException;
String[] getPackagesForUid(int uid) String[] getPackagesForUid(int uid)
throws RemoteException; throws RemoteException;
ParceledListSlice<PackageInfo> getInstalledPackages(int flags, int userId) ParceledListSlice<PackageInfo> getInstalledPackages(int flags, int userId)
throws RemoteException; throws RemoteException;
@RequiresApi(33)
ParceledListSlice<PackageInfo> getInstalledPackages(long flags, int userId)
throws RemoteException;
ParceledListSlice<ApplicationInfo> getInstalledApplications(int flags, int userId) ParceledListSlice<ApplicationInfo> getInstalledApplications(int flags, int userId)
throws RemoteException; throws RemoteException;
@RequiresApi(33)
ParceledListSlice<ApplicationInfo> getInstalledApplications(long flags, int userId)
throws RemoteException;
int getUidForSharedUser(String sharedUserName) int getUidForSharedUser(String sharedUserName)
throws RemoteException; throws RemoteException;
@ -64,7 +83,11 @@ public interface IPackageManager extends IInterface {
int installReason, List<String> whiteListedPermissions) throws RemoteException; int installReason, List<String> whiteListedPermissions) throws RemoteException;
ParceledListSlice<ResolveInfo> queryIntentActivities(Intent intent, ParceledListSlice<ResolveInfo> queryIntentActivities(Intent intent,
String resolvedType, int flags, int userId) throws RemoteException; String resolvedType, int flags, int userId) throws RemoteException;
@RequiresApi(33)
ParceledListSlice<ResolveInfo> queryIntentActivities(Intent intent,
String resolvedType, long flags, int userId) throws RemoteException;
boolean performDexOptMode(String packageName, boolean checkProfiles, boolean performDexOptMode(String packageName, boolean checkProfiles,
String targetCompilerFilter, boolean force, boolean bootComplete, String splitName) String targetCompilerFilter, boolean force, boolean bootComplete, String splitName)