报错如下:
![]()
在Android 14(API 级别 34)及以后版本中,DexClassLoader 被进一步限制,只能用于加载只读文件中的代码。这意味着你不能再使用 DexClassLoader 来加载从应用的内部存储空间中读取的文件。
我想通过JNI来修改只读文件,网上查找的方案如下:
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
extern "C" JNIEXPORT jboolean JNICALL
Java_com_example_yourapp_FileUtils_setFileReadOnly(JNIEnv *env, jobject obj, jstring path_) {
const char *path = env->GetStringUTFChars(path_, 0);
int result = chmod(path, S_IRUSR);
env->ReleaseStringUTFChars(path_, path);
if (result == -1) {
// 错误处理
return JNI_FALSE;
}
return JNI_TRUE;
}
C语言中提示修改成功。但是使用DexClassLoader的时候还是报上面一样的错误,应该是修改已读没有修改成功。
于是我换方案,通过反射调用Java中File类的setReadOnly方法试一下,代码如下:
//反射

最低0.47元/天 解锁文章
2197

被折叠的 条评论
为什么被折叠?



