From b27398fbe0b71b183c32d03cabfc30646a052af4 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Fri, 29 Jan 2021 07:32:21 +0800 Subject: [PATCH] Fix pendding hook condition --- core/src/main/cpp/main/include/art/runtime/class_linker.h | 4 ++-- .../main/java/io/github/lsposed/lspd/util/ClassUtils.java | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/core/src/main/cpp/main/include/art/runtime/class_linker.h b/core/src/main/cpp/main/include/art/runtime/class_linker.h index 1fc11288..d7d0efb4 100644 --- a/core/src/main/cpp/main/include/art/runtime/class_linker.h +++ b/core/src/main/cpp/main/include/art/runtime/class_linker.h @@ -131,8 +131,8 @@ namespace art { if (api_level >= __ANDROID_API_R__) { // In android R, FixupStaticTrampolines won't be called unless it's marking it as - // invisiblyInitialized. - // So we miss some calls between initialized and invisiblyInitialized. + // visiblyInitialized. + // So we miss some calls between initialized and visiblyInitialized. // Therefore we hook the new introduced MarkClassInitialized instead // This only happens on non-x86 devices lspd::HookSyms(handle, hook_func, MarkClassInitialized); diff --git a/core/src/main/java/io/github/lsposed/lspd/util/ClassUtils.java b/core/src/main/java/io/github/lsposed/lspd/util/ClassUtils.java index 407ce36e..aa0bac18 100644 --- a/core/src/main/java/io/github/lsposed/lspd/util/ClassUtils.java +++ b/core/src/main/java/io/github/lsposed/lspd/util/ClassUtils.java @@ -29,10 +29,14 @@ public class ClassUtils { * 5.0-8.0: kInitialized = 10 int * 8.1: kInitialized = 11 int * 9.0+: kInitialized = 14 uint8_t + * 11.0+: kInitialized = 14 uint8_t + * kVisiblyInitialized = 15 uint8_t */ @ApiSensitive(Level.MIDDLE) public static boolean isInitialized(Class clazz) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + return getClassStatus(clazz, true) >= 14; + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { return getClassStatus(clazz, true) == 14; } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O_MR1) { return getClassStatus(clazz, false) == 11;