Skip to content

Commit

Permalink
Update dex elements combine
Browse files Browse the repository at this point in the history
  • Loading branch information
luoyesiqiu committed Jan 13, 2024
1 parent 1aec48d commit 322e3fb
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
27 changes: 15 additions & 12 deletions shell/src/main/cpp/dpt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand All @@ -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);

Expand Down Expand Up @@ -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);

Expand All @@ -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);

Expand Down Expand Up @@ -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);

Expand Down
3 changes: 2 additions & 1 deletion shell/src/main/cpp/dpt.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 322e3fb

Please sign in to comment.