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:
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()
);