commit f597b408c57fb706e7e945001747d4af6748ab83
parent 514c5f186a616f8896824c38211e444aa6dae892
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Mon, 28 Aug 2023 13:22:38 +0200

build: dyn namespaces

Diffstat:
Mapp/build.gradle.kts | 2+-
Mcore/build.gradle.kts | 2+-
Mmapper/build.gradle.kts | 2+-
Mnative/build.gradle.kts | 23+++++++++++++++++++++--
Mnative/jni/CMakeLists.txt | 4++++
Mnative/jni/src/library.cpp | 14++++++++------
6 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/app/build.gradle.kts b/app/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } android { - namespace = "me.rhunk.snapenhance" + namespace = rootProject.ext["applicationId"].toString() compileSdk = 34 buildFeatures { diff --git a/core/build.gradle.kts b/core/build.gradle.kts @@ -4,7 +4,7 @@ plugins { alias(libs.plugins.kotlinAndroid) } android { - namespace = "me.rhunk.snapenhance.core" + namespace = rootProject.ext["applicationId"].toString() + ".core" compileSdk = 34 buildFeatures { diff --git a/mapper/build.gradle.kts b/mapper/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } android { - namespace = "me.rhunk.snapenhance.mapper" + namespace = rootProject.ext["applicationId"].toString() + ".mapper" compileSdk = 34 kotlinOptions { diff --git a/native/build.gradle.kts b/native/build.gradle.kts @@ -4,14 +4,33 @@ plugins { alias(libs.plugins.kotlinAndroid) } +val nativeName = System.nanoTime().toString(16) + android { - namespace = "me.rhunk.snapenhance.nativelib" + namespace = rootProject.ext["applicationId"].toString() + ".nativelib" compileSdk = 34 + buildFeatures { + buildConfig = true + } + defaultConfig { + buildConfigField("String", "NATIVE_NAME", "\"$nativeName\"") + packaging { + jniLibs { + excludes += "**/libdobby.so" + } + } externalNativeBuild { cmake { - cppFlags("") + arguments += listOf( + "-DOBFUSCATED_NAME=$nativeName", + "-DBUILD_NAMESPACE=${namespace!!.replace(".", "/")}" + ) + } + ndk { + //noinspection ChromeOsAbiSupport + abiFilters += listOf("arm64-v8a", "armeabi-v7a") } } } diff --git a/native/jni/CMakeLists.txt b/native/jni/CMakeLists.txt @@ -9,8 +9,11 @@ add_library(${CMAKE_PROJECT_NAME} SHARED src/library.cpp ) +add_compile_definitions(BUILD_NAMESPACE="${BUILD_NAMESPACE}") target_link_libraries(${CMAKE_PROJECT_NAME} android log dobby_static ) + +set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES OUTPUT_NAME ${OBFUSCATED_NAME})+ \ No newline at end of file diff --git a/native/jni/src/library.cpp b/native/jni/src/library.cpp @@ -112,9 +112,11 @@ void JNICALL init(JNIEnv *env, jobject clazz, jobject classloader) { // native lib object native_lib_object = env->NewGlobalRef(clazz); - native_lib_on_unary_call_method = env->GetMethodID(env->GetObjectClass(clazz), - "onNativeUnaryCall", - "(Ljava/lang/String;[B)Lme/rhunk/snapenhance/nativelib/NativeRequestData;"); + native_lib_on_unary_call_method = env->GetMethodID( + env->GetObjectClass(clazz), + "onNativeUnaryCall", + "(Ljava/lang/String;[B)L" BUILD_NAMESPACE "/NativeRequestData;" + ); // load libclient.so util::load_library(env, classloader, "client"); @@ -124,7 +126,7 @@ void JNICALL init(JNIEnv *env, jobject clazz, jobject classloader) { return; } //client_module.base -= 0x1000; // debugging purposes - LOGD("libclient.so offset=%u, size=%u", client_module.base, client_module.size); + LOGD("libclient.so base=0x%0lx, size=0x%0lx", client_module.base, client_module.size); // hooks DobbyHook((void *) DobbySymbolResolver("libc.so", "fstat"), (void *) fstat_hook, @@ -159,11 +161,11 @@ JNI_OnLoad(JavaVM *vm, void *_) { auto methods = std::vector<JNINativeMethod>(); methods.push_back({"init", "(Ljava/lang/ClassLoader;)V", (void *) init}); - methods.push_back({"loadConfig", "(Lme/rhunk/snapenhance/nativelib/NativeConfig;)V", + methods.push_back({"loadConfig", "(L" BUILD_NAMESPACE "/NativeConfig;)V", (void *) load_config}); env->RegisterNatives( - env->FindClass("me/rhunk/snapenhance/nativelib/NativeLib"), + env->FindClass(std::string(BUILD_NAMESPACE "/NativeLib").c_str()), methods.data(), methods.size() );