commit c35382f0010c976d9d567ed35fbb253ff7fa3034
parent 5347c50c15b714cbf9136e1deb87c12f2a939792
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Fri, 5 Apr 2024 19:18:33 +0200
fix(native): error handling
Diffstat:
2 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/native/jni/src/library.cpp b/native/jni/src/library.cpp
@@ -11,19 +11,19 @@
#include "hooks/sqlite_mutex.h"
#include "hooks/duplex_hook.h"
-void JNICALL init(JNIEnv *env, jobject clazz) {
+bool JNICALL init(JNIEnv *env, jobject clazz) {
LOGD("Initializing native");
using namespace common;
native_lib_object = env->NewGlobalRef(clazz);
- client_module = util::get_module(("split_config." + std::string(ARM64 ? "arm64_v8a" : "armeabi-v7a") + ".apk").c_str());
+ client_module = util::get_module("libclient.so");
if (client_module.base == 0) {
- LOGD("split_config not found, trying libclient.so");
- client_module = util::get_module("libclient.so");
+ LOGD("libclient.so not found, trying split_config");
+ client_module = util::get_module(("split_config." + std::string(ARM64 ? "arm64_v8a" : "armeabi-v7a") + ".apk").c_str());
if (client_module.base == 0) {
- LOGE("can't find libclient.so");
- return;
+ LOGE("can't find split_config!");
+ return false;
}
}
@@ -38,9 +38,10 @@ void JNICALL init(JNIEnv *env, jobject clazz) {
util::remap_sections(BUILD_PACKAGE);
LOGD("Native initialized");
+ return true;
}
-void JNICALL load_config(JNIEnv *env, jobject _, jobject config_object) {
+void JNICALL load_config(JNIEnv *env, jobject, jobject config_object) {
auto native_config_clazz = env->GetObjectClass(config_object);
#define GET_CONFIG_BOOL(name) env->GetBooleanField(config_object, env->GetFieldID(native_config_clazz, name, "Z"))
auto native_config = common::native_config;
@@ -50,7 +51,7 @@ void JNICALL load_config(JNIEnv *env, jobject _, jobject config_object) {
native_config->hook_asset_open = GET_CONFIG_BOOL("hookAssetOpen");
}
-void JNICALL lock_database(JNIEnv *env, jobject _, jstring database_name, jobject runnable) {
+void JNICALL lock_database(JNIEnv *env, jobject, jstring database_name, jobject runnable) {
auto database_name_str = env->GetStringUTFChars(database_name, nullptr);
auto mutex = SqliteMutexHook::mutex_map[database_name_str];
env->ReleaseStringUTFChars(database_name, database_name_str);
@@ -76,7 +77,7 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *_) {
vm->GetEnv((void **)&env, JNI_VERSION_1_6);
auto methods = std::vector<JNINativeMethod>();
- methods.push_back({"init", "()V", (void *)init});
+ methods.push_back({"init", "()Z", (void *)init});
methods.push_back({"loadConfig", "(L" BUILD_NAMESPACE "/NativeConfig;)V", (void *)load_config});
methods.push_back({"lockDatabase", "(Ljava/lang/String;Ljava/lang/Runnable;)V", (void *)lock_database});
diff --git a/native/src/main/kotlin/me/rhunk/snapenhance/nativelib/NativeLib.kt b/native/src/main/kotlin/me/rhunk/snapenhance/nativelib/NativeLib.kt
@@ -17,10 +17,12 @@ class NativeLib {
System.loadLibrary(BuildConfig.NATIVE_NAME)
initialized = true
callback(this)
- init()
+ if (!init()) {
+ throw IllegalStateException("NativeLib init failed. Check logcat for more info")
+ }
}.onFailure {
initialized = false
- Log.e("SnapEnhance", "NativeLib init failed")
+ Log.e("SnapEnhance", "NativeLib init failed", it)
}
}
@@ -57,7 +59,7 @@ class NativeLib {
}
}
- private external fun init()
+ private external fun init(): Boolean
private external fun loadConfig(config: NativeConfig)
private external fun lockDatabase(name: String, callback: Runnable)
}
\ No newline at end of file