#pragma once #include #include namespace lsplant { struct InitInfo { using InlineHookFunType = std::function; using InlineUnhookFunType = std::function; using ArtSymbolResolver = std::function; InlineHookFunType inline_hooker; InlineUnhookFunType inline_unhooker; ArtSymbolResolver art_symbol_resolver; }; [[nodiscard]] [[maybe_unused]] [[gnu::visibility("default")]] bool Init(JNIEnv *env, const InitInfo &info); [[nodiscard]] [[maybe_unused]] [[gnu::visibility("default")]] jmethodID Hook(JNIEnv *env, jmethodID target_method, jobject hooker_object, jmethodID callback_method); [[nodiscard]] [[maybe_unused]] [[gnu::visibility("default")]] bool UnHook(JNIEnv *env, jmethodID target_method); [[nodiscard]] [[maybe_unused]] [[gnu::visibility("default")]] bool IsHooked(JNIEnv *env, jmethodID method); [[nodiscard]] [[maybe_unused]] [[gnu::visibility("default")]] bool Deoptimize(JNIEnv *env, jmethodID method); [[nodiscard]] [[maybe_unused]] [[gnu::visibility("default")]] void *GetNativeFunction(JNIEnv *env, jmethodID method); } // namespace lsplant