Skip to content

Commit 877714d

Browse files
committed
fix: grantSelf failed
1 parent 2d701d4 commit 877714d

File tree

4 files changed

+23
-37
lines changed

4 files changed

+23
-37
lines changed

app/src/main/kotlin/li/songe/gkd/shizuku/AppOpsService.kt

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,29 +31,20 @@ class SafeAppOpsService(
3131
val supportCreateA11yOverlay get() = a11yOverlayOk
3232
}
3333

34-
fun checkOperation(
35-
code: Int,
36-
uid: Int = currentUserId,
37-
packageName: String,
38-
): Int? = safeInvokeShizuku {
39-
value.checkOperation(code, uid, packageName)
34+
fun checkOperation(code: Int): Int? = safeInvokeShizuku {
35+
value.checkOperation(code, android.os.Process.myUid(), META.appId)
4036
}
4137

42-
fun setMode(
43-
code: Int,
44-
uid: Int = currentUserId,
45-
packageName: String,
46-
mode: Int
47-
) = safeInvokeShizuku {
48-
value.setMode(code, uid, packageName, mode)
38+
fun setMode(code: Int, mode: Int) = safeInvokeShizuku {
39+
value.setMode(code, android.os.Process.myUid(), META.appId, mode)
4940
}
5041

5142
private fun setAllowSelfMode(code: Int) {
52-
val m = checkOperation(code = code, packageName = META.appId) ?: return
43+
val m = checkOperation(code = code) ?: return
5344
if (m == AppOpsManager.MODE_ALLOWED) {
5445
return
5546
}
56-
setMode(code = code, packageName = META.appId, mode = AppOpsManager.MODE_ALLOWED)
47+
setMode(code = code, mode = AppOpsManager.MODE_ALLOWED)
5748
}
5849

5950
fun allowAllSelfMode() {

app/src/main/kotlin/li/songe/gkd/shizuku/PackageManager.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import li.songe.gkd.permission.Manifest_permission_GET_APP_OPS_STATS
99
import li.songe.gkd.permission.canQueryPkgState
1010
import li.songe.gkd.util.AndroidTarget
1111

12-
@Suppress("unused")
12+
1313
class SafePackageManager(private val value: IPackageManager) {
1414
companion object {
1515

@@ -33,6 +33,7 @@ class SafePackageManager(private val value: IPackageManager) {
3333
}
3434
} ?: emptyList()
3535

36+
@Suppress("unused")
3637
fun getPackageInfo(
3738
packageName: String,
3839
flags: Int,
@@ -74,13 +75,6 @@ class SafePackageManager(private val value: IPackageManager) {
7475
)
7576
}
7677

77-
fun checkUidPermission(permName: String, uid: Int): Int? = safeInvokeShizuku {
78-
value.checkUidPermission(
79-
permName,
80-
uid
81-
)
82-
}
83-
8478
fun allowAllSelfPermission() {
8579
if (canUseGetInstalledApps && !canQueryPkgState.value) {
8680
try {

app/src/main/kotlin/li/songe/gkd/shizuku/ShizukuApi.kt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package li.songe.gkd.shizuku
33

44
import android.content.ComponentName
55
import android.content.pm.PackageManager
6-
import android.os.Build
7-
import androidx.annotation.RequiresApi
86
import androidx.annotation.WorkerThread
97
import kotlinx.coroutines.Dispatchers
108
import kotlinx.coroutines.delay
@@ -85,9 +83,20 @@ fun Class<*>.detectHiddenMethod(
8583
}
8684

8785
// https://github.com/android-cs/16/blob/main/packages/Shell/AndroidManifest.xml
88-
@RequiresApi(Build.VERSION_CODES.P)
89-
private const val Manifest_permission_MANAGE_APP_OPS_MODES =
90-
"android.permission.MANAGE_APP_OPS_MODES"
86+
private fun checkRemotePermission(permission: String): Boolean {
87+
return Shizuku.checkRemotePermission(permission) == PackageManager.PERMISSION_GRANTED
88+
}
89+
90+
private val isAdbRestricted: Boolean
91+
get() {
92+
if (!checkRemotePermission("android.permission.GRANT_RUNTIME_PERMISSIONS")) {
93+
return true
94+
}
95+
if (AndroidTarget.P && !checkRemotePermission("android.permission.MANAGE_APP_OPS_MODES")) {
96+
return true
97+
}
98+
return false
99+
}
91100

92101
class ShizukuContext(
93102
val serviceWrapper: UserServiceWrapper?,
@@ -125,13 +134,7 @@ class ShizukuContext(
125134
fun grantSelf() {
126135
packageManager ?: return
127136
appOpsService ?: return
128-
if (AndroidTarget.P && Shizuku.checkRemotePermission(
129-
Manifest_permission_MANAGE_APP_OPS_MODES
130-
) == PackageManager.PERMISSION_DENIED
131-
) {
132-
// 部分 ROM 会限制 ADB 权限
133-
return
134-
}
137+
if (isAdbRestricted) return
135138
appOpsService.allowAllSelfMode()
136139
packageManager.allowAllSelfPermission()
137140
}

hidden_api/src/main/java/android/content/pm/IPackageManager.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ public static IPackageManager asInterface(IBinder binder) {
3737

3838
int checkPermission(String permName, String pkgName, int userId);
3939

40-
int checkUidPermission(String permName, int uid);
41-
4240
void grantRuntimePermission(String packageName, String permissionName, int userId);
4341

4442
int getApplicationEnabledSetting(String packageName, int userId);

0 commit comments

Comments
 (0)