11package 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+
47import android .util .Log ;
58
69import java .lang .reflect .InvocationTargetException ;
10+ import java .lang .reflect .Modifier ;
711
812import de .robv .android .xposed .XC_MethodHook ;
913import 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