From 5d8bb897dbc69aefec7647e532ed9733529c1173 Mon Sep 17 00:00:00 2001 From: tonymanou Date: Sun, 22 Jan 2017 00:37:53 +0100 Subject: [PATCH] Separate JNI glue from actual C code, move CMakeLists file --- app/CMakeLists.txt | 5 ----- app/build.gradle | 2 +- app/src/main/jni/CMakeLists.txt | 7 +++++++ app/src/main/jni/jni_glue.c | 23 +++++++++++++++++++++++ app/src/main/jni/zipadjust.c | 25 +++---------------------- app/src/main/jni/zipadjust.h | 9 +++++++++ 6 files changed, 43 insertions(+), 28 deletions(-) delete mode 100644 app/CMakeLists.txt create mode 100644 app/src/main/jni/CMakeLists.txt create mode 100644 app/src/main/jni/jni_glue.c create mode 100644 app/src/main/jni/zipadjust.h diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt deleted file mode 100644 index 526301373..000000000 --- a/app/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -cmake_minimum_required(VERSION 3.6) -add_library(zipadjust SHARED src/main/jni/zipadjust.c) -find_library(libz z) -find_library(liblog log) -target_link_libraries(zipadjust ${libz} ${liblog}) \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 2c101b0ba..465b4b6bd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,7 +38,7 @@ android { } externalNativeBuild { cmake { - path 'CMakeLists.txt' + path 'src/main/jni/CMakeLists.txt' } } } diff --git a/app/src/main/jni/CMakeLists.txt b/app/src/main/jni/CMakeLists.txt new file mode 100644 index 000000000..9c2916124 --- /dev/null +++ b/app/src/main/jni/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.6) +add_library(zipadjust SHARED + jni_glue.c + zipadjust.c) +find_library(libz z) +find_library(liblog log) +target_link_libraries(zipadjust ${libz} ${liblog}) diff --git a/app/src/main/jni/jni_glue.c b/app/src/main/jni/jni_glue.c new file mode 100644 index 000000000..c3641cb99 --- /dev/null +++ b/app/src/main/jni/jni_glue.c @@ -0,0 +1,23 @@ +// +// Java entry point +// + +#include +#include +#include "zipadjust.h" + +JNIEXPORT jbyteArray JNICALL +Java_com_topjohnwu_magisk_utils_ZipUtils_zipAdjust(JNIEnv *env, jclass type, jbyteArray jbytes, jint size) { + fin = (*env)->GetPrimitiveArrayCritical(env, jbytes, NULL); + insize = (size_t) size; + + zipadjust(0); + + (*env)->ReleasePrimitiveArrayCritical(env, jbytes, fin, 0); + + jbyteArray ret = (*env)->NewByteArray(env, outsize); + (*env)->SetByteArrayRegion(env, ret, 0, outsize, (const jbyte*) fout); + free(fout); + + return ret; +} diff --git a/app/src/main/jni/zipadjust.c b/app/src/main/jni/zipadjust.c index 98fd9fce1..f59f7eb25 100644 --- a/app/src/main/jni/zipadjust.c +++ b/app/src/main/jni/zipadjust.c @@ -1,35 +1,16 @@ -#include #include #include #include #include +#include "zipadjust.h" #define LOG_TAG "zipadjust" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) -size_t insize, outsize = 0, alloc = 0; -unsigned char *fin, *fout; - -int zipadjust(int decompress) ; - -JNIEXPORT jbyteArray JNICALL -Java_com_topjohnwu_magisk_utils_ZipUtils_zipAdjust(JNIEnv *env, jclass type, jbyteArray jbytes, - jint size) { - fin = (*env)->GetPrimitiveArrayCritical(env, jbytes, NULL); - insize = (size_t) size; - - zipadjust(0); - - (*env)->ReleasePrimitiveArrayCritical(env, jbytes, fin, 0); - - jbyteArray ret = (*env)->NewByteArray(env, outsize); - (*env)->SetByteArrayRegion(env, ret, 0, outsize, (const jbyte*) fout); - free(fout); - - return ret; -} +size_t insize = 0, outsize = 0, alloc = 0; +unsigned char *fin = NULL, *fout = NULL; #pragma pack(1) struct local_header_struct { diff --git a/app/src/main/jni/zipadjust.h b/app/src/main/jni/zipadjust.h new file mode 100644 index 000000000..8f402ee09 --- /dev/null +++ b/app/src/main/jni/zipadjust.h @@ -0,0 +1,9 @@ +#ifndef MAGISKMANAGER_ZIPADJUST_H_H +#define MAGISKMANAGER_ZIPADJUST_H_H + +int zipadjust(int decompress); + +extern size_t insize, outsize, alloc; +extern unsigned char *fin, *fout; + +#endif //MAGISKMANAGER_ZIPADJUST_H_H