@@ -54,7 +54,7 @@ bool ArtRuntime::OnLoad(JavaVM *vm, JNIEnv *env, jclass java_class) {
54
54
}
55
55
api_level_ = GetAndroidApiLevel ();
56
56
PreLoadRequiredStuff (env);
57
- const char *art_path = kLibArtPath ;
57
+ const char *art_path = api_level_ >= ANDROID_Q ? kLibArtPath_Q : kLibArtPath ;
58
58
art_elf_image_ = WDynamicLibOpen (art_path);
59
59
if (art_elf_image_ == nullptr ) {
60
60
LOG (ERROR) << " Unable to read data from libart.so." ;
@@ -70,6 +70,8 @@ bool ArtRuntime::OnLoad(JavaVM *vm, JNIEnv *env, jclass java_class) {
70
70
size_t entrypoint_filed_size = (api_level_ <= ANDROID_LOLLIPOP) ? 8
71
71
: kPointerSize ;
72
72
u4 expected_access_flags = kAccPrivate | kAccStatic | kAccNative ;
73
+ if (api_level_ >= ANDROID_Q)
74
+ expected_access_flags |= kAccPublicApi ;
73
75
jmethodID reserved0 = env->GetStaticMethodID (java_class, kMethodReserved0 , " ()V" );
74
76
jmethodID reserved1 = env->GetStaticMethodID (java_class, kMethodReserved1 , " ()V" );
75
77
@@ -235,6 +237,9 @@ ArtRuntime::HookMethod(JNIEnv *env, jclass decl_class, jobject hooked_java_metho
235
237
if (api_level_ >= ANDROID_P) {
236
238
access_flags &= ~kAccCriticalNative_P ;
237
239
}
240
+ if (api_level_ >= ANDROID_Q) {
241
+ access_flags &= ~kAccFastInterpreterToInterpreterInvoke ;
242
+ }
238
243
hooked_method.SetAccessFlags (access_flags);
239
244
hooked_method.SetEntryPointFromQuickCompiledCode (
240
245
class_linker_objects_.quick_generic_jni_trampoline_
@@ -457,6 +462,21 @@ ALWAYS_INLINE bool ArtRuntime::EnforceDisableHiddenAPIPolicyImpl() {
457
462
if (symbol) {
458
463
WInlineHookFunction (symbol, reinterpret_cast <void *>(OnInvokeHiddenAPI), nullptr );
459
464
}
465
+ // Android Q : Release version
466
+ symbol = WDynamicLibSymbol (
467
+ art_elf_image_,
468
+ " _ZN3art9hiddenapi6detail28ShouldDenyAccessToMemberImplINS_8ArtFieldEEEbPT_NS0_7ApiListENS0_12AccessMethodE"
469
+ );
470
+ if (symbol) {
471
+ WInlineHookFunction (symbol, reinterpret_cast <void *>(OnInvokeHiddenAPI), nullptr );
472
+ }
473
+ symbol = WDynamicLibSymbol (
474
+ art_elf_image_,
475
+ " _ZN3art9hiddenapi6detail28ShouldDenyAccessToMemberImplINS_9ArtMethodEEEbPT_NS0_7ApiListENS0_12AccessMethodE"
476
+ );
477
+ if (symbol) {
478
+ WInlineHookFunction (symbol, reinterpret_cast <void *>(OnInvokeHiddenAPI), nullptr );
479
+ }
460
480
return symbol != nullptr ;
461
481
}
462
482
0 commit comments