Skip to content

Commit d4e6619

Browse files
authored
Remove final modifier to bypass A17 reflection restrictions (#147)
1 parent ed19edb commit d4e6619

1 file changed

Lines changed: 14 additions & 7 deletions

File tree

app/src/main/java/toolkit/coderstory/CorePatchForU.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package toolkit.coderstory;
22

3-
import android.os.Build;
3+
import static de.robv.android.xposed.XposedHelpers.findField;
4+
import static de.robv.android.xposed.XposedHelpers.getIntField;
5+
import static de.robv.android.xposed.XposedHelpers.setIntField;
6+
47
import android.util.Log;
58

69
import java.lang.reflect.InvocationTargetException;
10+
import java.lang.reflect.Modifier;
711

812
import de.robv.android.xposed.XC_MethodHook;
913
import de.robv.android.xposed.XposedBridge;
@@ -24,12 +28,15 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam)
2428
}
2529

2630
// https://cs.android.com/android/platform/superproject/+/android-14.0.0_r60:frameworks/base/services/core/java/com/android/server/pm/ReconcilePackageUtils.java;l=61;bpv=1;bpt=0
27-
// Android 17 blocks using reflection to modify static final field
28-
// Since DP2, instead of throwing java exception, they just let art itself crash
29-
// Disable it temporarily till we change hook points
30-
if ((Build.VERSION.SDK_INT < Build.VERSION_CODES.BAKLAVA || (Build.VERSION.SDK_INT == Build.VERSION_CODES.BAKLAVA && Build.VERSION.PREVIEW_SDK_INT == 0))
31-
&& prefs.getBoolean("digestCreak", true) && prefs.getBoolean("sharedUser", false)) {
32-
setStaticBooleanField(utilClass, "ALLOW_NON_PRELOADS_SYSTEM_SHAREDUIDS", true);
31+
if (prefs.getBoolean("digestCreak", true) && prefs.getBoolean("sharedUser", false)) {
32+
try {
33+
var field = findField(utilClass, "ALLOW_NON_PRELOADS_SYSTEM_SHAREDUIDS");
34+
var accessFlags = getIntField(field, "accessFlags");
35+
setIntField(field, "accessFlags", accessFlags & ~Modifier.FINAL);
36+
field.set(null, true);
37+
} catch (Throwable e) {
38+
XposedBridge.log("E/" + MainHook.TAG + " ALLOW_NON_PRELOADS_SYSTEM_SHAREDUIDS failed" + Log.getStackTraceString(e));
39+
}
3340
}
3441

3542
// ee11a9c (Rename AndroidPackageApi to AndroidPackage)

0 commit comments

Comments
 (0)