From 02adea86913d9ffee6df7fe9cc4360026dd7d5d1 Mon Sep 17 00:00:00 2001 From: solohsu Date: Sun, 2 Aug 2020 18:37:47 +0800 Subject: [PATCH] Update isolated process checking method --- appveyor.yml | 2 +- .../riru/edxp/framework/ProcessHelper.java | 45 ++++++++++++++++++- .../elderdrivers/riru/edxp/util/Versions.java | 4 ++ edxp-core/build.gradle | 2 +- 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 0cf7a659..4b90ba0a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '0.5.0.5 ({build})' +version: '0.5.0.6 ({build})' environment: ANDROID_HOME: C:\android-sdk-windows diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/framework/ProcessHelper.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/framework/ProcessHelper.java index 4423f165..0d669da8 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/framework/ProcessHelper.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/framework/ProcessHelper.java @@ -1,5 +1,7 @@ package com.elderdrivers.riru.edxp.framework; +import android.os.Process; + import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.annotation.ApiSensitive; import de.robv.android.xposed.annotation.Level; @@ -31,11 +33,25 @@ public class ProcessHelper { */ public static final int LAST_ISOLATED_UID = 99999; + /** + * First uid used for fully isolated sandboxed processes spawned from an app zygote + */ + public static final int FIRST_APP_ZYGOTE_ISOLATED_UID = 90000; + /** + * Number of UIDs we allocate per application zygote + */ + public static final int NUM_UIDS_PER_APP_ZYGOTE = 100; + /** + * Last uid used for fully isolated sandboxed processes spawned from an app zygote + */ + public static final int LAST_APP_ZYGOTE_ISOLATED_UID = 98999; + /** * Range of uids allocated for a user. */ public static final int PER_USER_RANGE = 100000; + // @see UserHandle#getAppId(int) public static int getAppId(int uid) { return uid % PER_USER_RANGE; } @@ -49,7 +65,32 @@ public class ProcessHelper { } public static boolean isIsolated(int uid) { - uid = getAppId(uid); - return uid >= FIRST_ISOLATED_UID && uid <= LAST_ISOLATED_UID; + return (boolean) XposedHelpers.callStaticMethod( + Process.class, "isIsolated", uid); + } + + /** + * Whether a UID belongs to a regular app. *Note* "Not a regular app" does not mean + * "it's system", because of isolated UIDs. Use {@link #isCore} for that. + */ + public static boolean isApp(int uid) { + if (uid > 0) { + final int appId = getAppId(uid); + return appId >= Process.FIRST_APPLICATION_UID && appId <= Process.LAST_APPLICATION_UID; + } else { + return false; + } + } + + /** + * Whether a UID belongs to a system core component or not. + */ + public static boolean isCore(int uid) { + if (uid >= 0) { + final int appId = getAppId(uid); + return appId < Process.FIRST_APPLICATION_UID; + } else { + return false; + } } } diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Versions.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Versions.java index 73aed0b2..0a1bdf5b 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Versions.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/util/Versions.java @@ -7,4 +7,8 @@ public class Versions { public static boolean hasR() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R; } + + public static boolean hasQ() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q; + } } diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index 0ad8ac0b..8368c27d 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -4,7 +4,7 @@ import org.gradle.internal.os.OperatingSystem apply plugin: 'com.android.library' // Values set here will be overriden by AppVeyor, feel free to modify during development. -def buildVersionName = 'v0.5.0.5' +def buildVersionName = 'v0.5.0.6' def buildVersionCode = 233 if (System.env.APPVEYOR_BUILD_VERSION != null) {