@@ -63,7 +63,7 @@ public final class HiddenApiBypass {
6363 unsafe = (Unsafe ) Unsafe .class .getDeclaredMethod ("getUnsafe" ).invoke (null );
6464 var data = Helper .getCachedOffsetData ();
6565 if (data == null ) {
66- data = readOffsetData ();
66+ data = readOffsetDataIO ();
6767 Helper .setCachedOffsetData (data );
6868 } else if (BuildConfig .DEBUG ) {
6969 Log .d (TAG , "Using cached offset data" );
@@ -74,18 +74,19 @@ public final class HiddenApiBypass {
7474 methodsOffset = data [3 ];
7575 iFieldOffset = data [4 ];
7676 sFieldOffset = data [5 ];
77- artMethodSize = data [6 ];
78- artMethodBias = data [7 ];
79- artFieldSize = data [8 ];
80- artFieldBias = data [9 ];
77+ var dataRT = readOffsetDataRT ();
78+ artMethodSize = dataRT [0 ];
79+ artMethodBias = dataRT [1 ];
80+ artFieldSize = dataRT [2 ];
81+ artFieldBias = dataRT [3 ];
8182 } catch (ReflectiveOperationException e ) {
8283 Log .e (TAG , "Initialize error" , e );
8384 throw new ExceptionInInitializerError (e );
8485 }
8586
8687 }
8788
88- private static long [] readOffsetData () throws ReflectiveOperationException {
89+ private static long [] readOffsetDataIO () throws ReflectiveOperationException {
8990 ClassLoader bootClassloader = new CoreOjClassLoader ();
9091 Class <?> executableClass = bootClassloader .loadClass (Executable .class .getName ());
9192 Class <?> methodHandleClass = bootClassloader .loadClass (MethodHandle .class .getName ());
@@ -95,16 +96,27 @@ private static long[] readOffsetData() throws ReflectiveOperationException {
9596 var artOffset = unsafe .objectFieldOffset (methodHandleClass .getDeclaredField ("artFieldOrMethod" ));
9697 var methodsOffset = unsafe .objectFieldOffset (classClass .getDeclaredField ("methods" ));
9798
98- long iField ;
99- long sField ;
99+ long iFieldOffset ;
100+ long sFieldOffset ;
100101 try {
101- iField = unsafe .objectFieldOffset (classClass .getDeclaredField ("fields" ));
102- sField = iField ;
102+ iFieldOffset = unsafe .objectFieldOffset (classClass .getDeclaredField ("fields" ));
103+ sFieldOffset = iFieldOffset ;
103104 } catch (NoSuchFieldException e ) {
104- iField = unsafe .objectFieldOffset (classClass .getDeclaredField ("iFields" ));
105- sField = unsafe .objectFieldOffset (classClass .getDeclaredField ("sFields" ));
105+ iFieldOffset = unsafe .objectFieldOffset (classClass .getDeclaredField ("iFields" ));
106+ sFieldOffset = unsafe .objectFieldOffset (classClass .getDeclaredField ("sFields" ));
106107 }
107108
109+ long [] data = new long [6 ];
110+ data [0 ] = methodOffset ;
111+ data [1 ] = classOffset ;
112+ data [2 ] = artOffset ;
113+ data [3 ] = methodsOffset ;
114+ data [4 ] = iFieldOffset ;
115+ data [5 ] = sFieldOffset ;
116+ return data ;
117+ }
118+
119+ private static long [] readOffsetDataRT () throws ReflectiveOperationException {
108120 Method mA = Helper .NeverCall .class .getDeclaredMethod ("a" );
109121 Method mB = Helper .NeverCall .class .getDeclaredMethod ("b" );
110122 mA .setAccessible (true );
@@ -129,25 +141,19 @@ private static long[] readOffsetData() throws ReflectiveOperationException {
129141 MethodHandle mhJ = MethodHandles .lookup ().unreflectGetter (fJ );
130142 long iAddr = unsafe .getLong (mhI , artOffset );
131143 long jAddr = unsafe .getLong (mhJ , artOffset );
132- long iFields = unsafe .getLong (Helper .NeverCall .class , iField );
144+ long iFields = unsafe .getLong (Helper .NeverCall .class , iFieldOffset );
133145 var artFieldSize = jAddr - iAddr ;
134146 if (BuildConfig .DEBUG ) Log .v (TAG , artFieldSize + " " +
135147 Long .toString (iAddr , 16 ) + ", " +
136148 Long .toString (jAddr , 16 ) + ", " +
137149 Long .toString (iFields , 16 ));
138150 var artFieldBias = iAddr - iFields ;
139151
140- long [] data = new long [10 ];
141- data [0 ] = methodOffset ;
142- data [1 ] = classOffset ;
143- data [2 ] = artOffset ;
144- data [3 ] = methodsOffset ;
145- data [4 ] = iField ;
146- data [5 ] = sField ;
147- data [6 ] = artMethodSize ;
148- data [7 ] = artMethodBias ;
149- data [8 ] = artFieldSize ;
150- data [9 ] = artFieldBias ;
152+ long [] data = new long [4 ];
153+ data [0 ] = artMethodSize ;
154+ data [1 ] = artMethodBias ;
155+ data [2 ] = artFieldSize ;
156+ data [3 ] = artFieldBias ;
151157 return data ;
152158 }
153159
0 commit comments