Skip to content

Commit eff207e

Browse files
aprz512shifujun
authored andcommitted
feat(core): 支持新增API33新增的getPackageInfo方法
androidx.profileinstaller.ProfileVerifier中有使用。 Tencent#1277
1 parent e74bebc commit eff207e

File tree

4 files changed

+45
-9
lines changed

4 files changed

+45
-9
lines changed

buildScripts/gradle/versions.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
COMPILE_SDK_VERSION=31
1+
COMPILE_SDK_VERSION=33
22
MIN_SDK_VERSION=14
33
TARGET_SDK_VERSION=28
44
VERSION_CODE=1

projects/sdk/core/loader/src/main/kotlin/com/tencent/shadow/core/loader/managers/PluginPackageManagerImpl.kt

+32-8
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,18 @@
1919
package com.tencent.shadow.core.loader.managers
2020

2121
import android.annotation.SuppressLint
22+
import android.annotation.TargetApi
2223
import android.content.ComponentName
2324
import android.content.Intent
24-
import android.content.pm.*
25+
import android.content.pm.ActivityInfo
26+
import android.content.pm.ApplicationInfo
27+
import android.content.pm.ComponentInfo
28+
import android.content.pm.PackageInfo
29+
import android.content.pm.PackageManager
30+
import android.content.pm.ProviderInfo
31+
import android.content.pm.ResolveInfo
32+
import android.content.pm.ServiceInfo
33+
import android.os.Build
2534
import com.tencent.shadow.core.runtime.PluginPackageManager
2635

2736
@SuppressLint("WrongConstant")
@@ -41,13 +50,28 @@ internal class PluginPackageManagerImpl(
4150
override fun getPackageInfo(packageName: String, flags: Int): PackageInfo? {
4251
val hostPackageInfo = hostPackageManager.getPackageInfo(packageName, flags)
4352
return if (packageName.isPlugin()) {
44-
val packageInfo = hostPackageManager.getPackageArchiveInfo(pluginArchiveFilePath, flags)
45-
if (packageInfo != null) {
46-
packageInfo.applicationInfo = getPluginApplicationInfo(flags)
47-
packageInfo.permissions = hostPackageInfo.permissions
48-
packageInfo.requestedPermissions = hostPackageInfo.requestedPermissions
49-
}
50-
packageInfo
53+
getPluginPackageInfo(flags, hostPackageInfo)
54+
} else {
55+
hostPackageInfo
56+
}
57+
}
58+
59+
private fun getPluginPackageInfo(flags: Int, hostPackageInfo: PackageInfo): PackageInfo? {
60+
return hostPackageManager.getPackageArchiveInfo(pluginArchiveFilePath, flags)?.apply {
61+
applicationInfo = getPluginApplicationInfo(flags)
62+
permissions = hostPackageInfo.permissions
63+
requestedPermissions = hostPackageInfo.requestedPermissions
64+
}
65+
}
66+
67+
@TargetApi(Build.VERSION_CODES.TIRAMISU)
68+
override fun getPackageInfo(
69+
packageName: String,
70+
flags: PackageManager.PackageInfoFlags
71+
): PackageInfo? {
72+
val hostPackageInfo = hostPackageManager.getPackageInfo(packageName, flags)
73+
return if (packageName.isPlugin()) {
74+
getPluginPackageInfo(flags.value.toInt(), hostPackageInfo)
5175
} else {
5276
hostPackageInfo
5377
}

projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PackageManagerInvokeRedirect.java

+6
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ public static PackageInfo getPackageInfo(ClassLoader classLoaderOfInvokeCode, Ve
7070
return getPluginPackageManager(classLoaderOfInvokeCode).getPackageInfo(versionedPackage.getPackageName(), flags);
7171
}
7272

73+
@TargetApi(Build.VERSION_CODES.TIRAMISU)
74+
public static PackageInfo getPackageInfo(ClassLoader classLoaderOfInvokeCode, VersionedPackage versionedPackage,
75+
PackageManager.PackageInfoFlags flags) throws PackageManager.NameNotFoundException {
76+
return getPluginPackageManager(classLoaderOfInvokeCode).getPackageInfo(versionedPackage.getPackageName(), flags);
77+
}
78+
7379
public static ProviderInfo resolveContentProvider(ClassLoader classLoaderOfInvokeCode, String name, int flags) {
7480
return getPluginPackageManager(classLoaderOfInvokeCode).resolveContentProvider(name, flags);
7581
}

projects/sdk/core/runtime/src/main/java/com/tencent/shadow/core/runtime/PluginPackageManager.java

+6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.tencent.shadow.core.runtime;
22

3+
import android.annotation.TargetApi;
34
import android.content.ComponentName;
45
import android.content.Intent;
56
import android.content.pm.ActivityInfo;
67
import android.content.pm.ApplicationInfo;
78
import android.content.pm.PackageInfo;
9+
import android.content.pm.PackageManager;
810
import android.content.pm.ProviderInfo;
911
import android.content.pm.ResolveInfo;
1012
import android.content.pm.ServiceInfo;
13+
import android.os.Build;
1114

1215
import java.util.List;
1316

@@ -22,6 +25,9 @@ public interface PluginPackageManager {
2225

2326
PackageInfo getPackageInfo(String packageName, int flags);
2427

28+
@TargetApi(Build.VERSION_CODES.TIRAMISU)
29+
PackageInfo getPackageInfo(String packageName, PackageManager.PackageInfoFlags flags);
30+
2531
ProviderInfo resolveContentProvider(String name, int flags);
2632

2733
List<ProviderInfo> queryContentProviders(String processName, int uid, int flags);

0 commit comments

Comments
 (0)