这可能是因为InMemoryDexClassLoader加载dex文件的时候没有正确设置so文件的加载路径导致的。在使用InMemoryDexClassLoader加载dex文件时,需要手动设置so文件的加载路径,以便系统能够正确找到和加载so文件。

可以尝试使用以下代码来设置so文件的加载路径:

String libPath = "/path/to/so/file"; // 替换成so文件的实际路径
System.setProperty("java.library.path", libPath);
Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);

InMemoryDexClassLoader dexClassLoader = new InMemoryDexClassLoader(dexBytes, null, libPath, parentClassLoader);

这样设置之后,InMemoryDexClassLoader就能正确加载dex文件中的so库了。记得将/path/to/so/file替换成你实际的so文件路径。

另外,还要确保dex文件中的so库与当前设备的架构兼容,否则加载so库也会失败

android开发:我用InMemoryDexClassLoader加载dex进来后dex里面有一段逻辑是SystemloadLibrary加载一个so执行后报错找不到so但是我不加载这个dex文件直接SystemloadLibrary加载这个so不会报错这是怎么回事?

原文地址: https://www.cveoy.top/t/topic/is3X 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录