From 322e3fb1cc1fca04c6a29cfa17a828c118c2b65c Mon Sep 17 00:00:00 2001 From: luoyesiqiu Date: Sat, 13 Jan 2024 10:56:28 +0800 Subject: [PATCH] Update dex elements combine --- shell/src/main/cpp/dpt.cpp | 27 +++++++++++++++------------ shell/src/main/cpp/dpt.h | 3 ++- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/shell/src/main/cpp/dpt.cpp b/shell/src/main/cpp/dpt.cpp index fb130e11..0774c635 100644 --- a/shell/src/main/cpp/dpt.cpp +++ b/shell/src/main/cpp/dpt.cpp @@ -27,13 +27,9 @@ static JNINativeMethod gMethods[] = { {"ra", "(Ljava/lang/String;)V", (void *) replaceApplication} }; -jobjectArray makePathElements(JNIEnv* env){ - char compressedDexesPathChs[256] = {0}; - getCompressedDexesPath(env,compressedDexesPathChs, 256); - - jstring compressedDexesPath = env->NewStringUTF(compressedDexesPathChs); - - java_io_File file(env,compressedDexesPath); +jobjectArray makePathElements(JNIEnv* env,const char *pathChs) { + jstring path = env->NewStringUTF(pathChs); + java_io_File file(env,path); java_util_ArrayList files(env); files.add(file.getInstance()); @@ -49,9 +45,8 @@ jobjectArray makePathElements(JNIEnv* env){ return elements; } -void mergeDexElements(JNIEnv* env,jclass __unused, jobject targetClassLoader){ - - jobjectArray extraDexElements = makePathElements(env); +void mergeDexElement(JNIEnv* env,jclass __unused, jobject targetClassLoader,const char* pathChs) { + jobjectArray extraDexElements = makePathElements(env,pathChs); dalvik_system_BaseDexClassLoader targetBaseDexClassLoader(env,targetClassLoader); @@ -83,6 +78,15 @@ void mergeDexElements(JNIEnv* env,jclass __unused, jobject targetClassLoader){ DLOGD("mergeDexElements success"); } +void mergeDexElements(JNIEnv* env,jclass klass, jobject targetClassLoader) { + char compressedDexesPathChs[256] = {0}; + getCompressedDexesPath(env,compressedDexesPathChs, 256); + + mergeDexElement(env,klass,targetClassLoader,compressedDexesPathChs); + + DLOGD("mergeDexElements success"); +} + void removeDexElements(JNIEnv* env,jclass __unused,jobject classLoader,jstring elementName){ dalvik_system_BaseDexClassLoader oldBaseDexClassLoader(env,classLoader); @@ -97,7 +101,6 @@ void removeDexElements(JNIEnv* env,jclass __unused,jobject classLoader,jstring e jint newLen = oldLen; const char *removeElementNameChs = env->GetStringUTFChars(elementName,nullptr); - //推导需要移除的项 for(int i = 0;i < oldLen;i++) { jobject elementObj = env->GetObjectArrayElement(dexElements, i); @@ -125,7 +128,7 @@ void removeDexElements(JNIEnv* env,jclass __unused,jobject classLoader,jstring e DLOGD("removeDexElements oldlen = %d , newlen = %d",oldLen,newLen); jint newArrayIndex = 0; - //填充新数组 + for(int i = 0;i < oldLen;i++) { jobject elementObj = env->GetObjectArrayElement(dexElements, i); diff --git a/shell/src/main/cpp/dpt.h b/shell/src/main/cpp/dpt.h index d0f81f5c..11088112 100644 --- a/shell/src/main/cpp/dpt.h +++ b/shell/src/main/cpp/dpt.h @@ -39,7 +39,8 @@ void init_app(JNIEnv* env,jclass __unused,jobject context); void readCodeItem(uint8_t *data,size_t data_len); jstring readAppComponentFactory(JNIEnv *env,jclass __unused); jstring readApplicationName(JNIEnv *env, jclass __unused); -jobjectArray makePathElements(JNIEnv* env); +jobjectArray makePathElements(JNIEnv* env,const char *pathChs); +void mergeDexElement(JNIEnv* env,jclass __unused, jobject targetClassLoader,const char* pathChs); void mergeDexElements(JNIEnv* env,jclass __unused,jobject targetClassLoader); void removeDexElements(JNIEnv* env,jclass __unused,jobject classLoader,jstring elementName); void replaceApplication(JNIEnv *env, jclass __unused, jstring originApplication);