build: dyn namespaces

This commit is contained in:
rhunk
2023-08-28 13:22:38 +02:00
parent 514c5f186a
commit f597b408c5
6 changed files with 35 additions and 11 deletions

View File

@@ -7,7 +7,7 @@ plugins {
}
android {
namespace = "me.rhunk.snapenhance"
namespace = rootProject.ext["applicationId"].toString()
compileSdk = 34
buildFeatures {

View File

@@ -4,7 +4,7 @@ plugins {
alias(libs.plugins.kotlinAndroid)
}
android {
namespace = "me.rhunk.snapenhance.core"
namespace = rootProject.ext["applicationId"].toString() + ".core"
compileSdk = 34
buildFeatures {

View File

@@ -5,7 +5,7 @@ plugins {
}
android {
namespace = "me.rhunk.snapenhance.mapper"
namespace = rootProject.ext["applicationId"].toString() + ".mapper"
compileSdk = 34
kotlinOptions {

View File

@@ -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")
}
}
}

View File

@@ -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})

View File

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