From 40de96e4bb53de4d8843e3a442a5f65dcd2b2ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E5=88=BA=E8=9E=88?= Date: Fri, 27 Mar 2026 21:37:50 +0800 Subject: [PATCH] perf: compat android17 api --- .../kotlin/li/songe/gkd/shizuku/PackageManager.kt | 5 ++++- .../main/kotlin/li/songe/gkd/util/AndroidTarget.kt | 4 ++++ build.gradle.kts | 6 +++--- .../android/content/pm/IPackageManagerCompat.java | 12 ++++++++++++ .../java/android/content/pm/PackageInfoList.java | 7 +++++++ 5 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 hidden_api/src/main/java/android/content/pm/IPackageManagerCompat.java create mode 100644 hidden_api/src/main/java/android/content/pm/PackageInfoList.java diff --git a/app/src/main/kotlin/li/songe/gkd/shizuku/PackageManager.kt b/app/src/main/kotlin/li/songe/gkd/shizuku/PackageManager.kt index 9c440fb4..1c320f7f 100644 --- a/app/src/main/kotlin/li/songe/gkd/shizuku/PackageManager.kt +++ b/app/src/main/kotlin/li/songe/gkd/shizuku/PackageManager.kt @@ -2,6 +2,7 @@ package li.songe.gkd.shizuku import android.Manifest import android.content.pm.IPackageManager +import android.content.pm.IPackageManagerCompat import android.content.pm.PackageInfo import li.songe.gkd.META import li.songe.gkd.app @@ -26,7 +27,9 @@ class SafePackageManager(private val value: IPackageManager) { flags: Int, userId: Int = currentUserId, ): List = safeInvokeShizuku { - if (AndroidTarget.TIRAMISU) { + if (AndroidTarget.CINNAMON_BUN) { + (value as IPackageManagerCompat).getInstalledPackages(flags.toLong(), userId).list + } else if (AndroidTarget.TIRAMISU) { value.getInstalledPackages(flags.toLong(), userId).list } else { value.getInstalledPackages(flags, userId).list diff --git a/app/src/main/kotlin/li/songe/gkd/util/AndroidTarget.kt b/app/src/main/kotlin/li/songe/gkd/util/AndroidTarget.kt index edb25554..4d688965 100644 --- a/app/src/main/kotlin/li/songe/gkd/util/AndroidTarget.kt +++ b/app/src/main/kotlin/li/songe/gkd/util/AndroidTarget.kt @@ -31,4 +31,8 @@ object AndroidTarget { /** Android 16+ */ @get:ChecksSdkIntAtLeast(api = Build.VERSION_CODES.BAKLAVA) val BAKLAVA = Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA + + /** Android 17+ */ + @get:ChecksSdkIntAtLeast(api = Build.VERSION_CODES.CINNAMON_BUN) + val CINNAMON_BUN = Build.VERSION.SDK_INT >= Build.VERSION_CODES.CINNAMON_BUN } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index cab9d677..35a7233c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,9 +3,9 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget ext { set("android.namespace", "li.songe.gkd") - set("android.buildToolsVersion", "36.1.0") - set("android.compileSdk", 36) - set("android.targetSdk", 36) + set("android.buildToolsVersion", "37.0.0") + set("android.compileSdk", 37) + set("android.targetSdk", 37) set("android.minSdk", 26) set("android.javaVersion", JavaVersion.VERSION_11) set("kotlin.jvmTarget", JvmTarget.JVM_11) diff --git a/hidden_api/src/main/java/android/content/pm/IPackageManagerCompat.java b/hidden_api/src/main/java/android/content/pm/IPackageManagerCompat.java new file mode 100644 index 00000000..16e4f38d --- /dev/null +++ b/hidden_api/src/main/java/android/content/pm/IPackageManagerCompat.java @@ -0,0 +1,12 @@ +package android.content.pm; + +import dev.rikka.tools.refine.RefineAs; + +/** + * @noinspection unused + */ +@RefineAs(IPackageManager.class) +public interface IPackageManagerCompat { + // android 17+ + PackageInfoList getInstalledPackages(long flags, int userId); +} diff --git a/hidden_api/src/main/java/android/content/pm/PackageInfoList.java b/hidden_api/src/main/java/android/content/pm/PackageInfoList.java new file mode 100644 index 00000000..bc4dce52 --- /dev/null +++ b/hidden_api/src/main/java/android/content/pm/PackageInfoList.java @@ -0,0 +1,7 @@ +package android.content.pm; + +/** + * @noinspection unused + */ +public class PackageInfoList extends ParceledListSlice { +} \ No newline at end of file