From f597b408c57fb706e7e945001747d4af6748ab83 Mon Sep 17 00:00:00 2001 From: rhunk <101876869+rhunk@users.noreply.github.com> Date: Mon, 28 Aug 2023 13:22:38 +0200 Subject: [PATCH] build: dyn namespaces --- app/build.gradle.kts | 2 +- core/build.gradle.kts | 2 +- mapper/build.gradle.kts | 2 +- native/build.gradle.kts | 23 +++++++++++++++++++++-- native/jni/CMakeLists.txt | 3 +++ native/jni/src/library.cpp | 14 ++++++++------ 6 files changed, 35 insertions(+), 11 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f7c2b28a..43b8b847 100644 --- 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 index 254fed4d..bde2fe83 100644 --- 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 index b44ae649..eaa8efe1 100644 --- 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 index dbd9d248..5d1bf408 100644 --- 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 index 5b67f6b5..0b5be920 100644 --- 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 index d52263aa..4a2e32ce 100644 --- 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(); 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() );