gpt4 book ai didi

android - 如何在 android 2.1 上从 sd 卡加载 jni?

转载 作者:搜寻专家 更新时间:2023-11-01 09:18:25 26 4
gpt4 key购买 nike

我想在运行时加载第三方jni库。
我试过直接从 sdcard 加载。不出所料,失败了。
我试图将库从 sdcard 复制到/data/data/app/然后
System.load(/data/data/app/libjni.so)
它适用于 HTC HERO,但在 HTC Legend with Android 2.1 上失败。它在执行 native 代码期间失败并写入日志无信息堆栈跟踪还有其他方法吗?这是最好的一段代码,可以在 1.5(HTC Hero)上运行,但不能在 2.1(HTC Legend)上运行。

FileInputStream fis = new FileInputStream("/sdcard/libjni.so");
File nf = new File("/data/data/app/libjni.so");
FileOutputStream fos = new FileOutputStream(nf);
byte[] buf = new byte[2048];
int n;
while ((n = fis.read(buf)) > 0)
fos.write(buf, 0, n);
fis.close();
fos.close();
System.load("/data/data/app/libjni.so");

最佳答案

Android 的动态加载器无法从 sdcard 的文件系统加载可执行代码,因为它被标记为不可执行并且您无法从不可执行存储映射可执行内存页面。 (理论上,您可以手动将内容复制到可执行的匿名映射页面中,但这很丑陋。支持 SD 上应用程序的 Android 版本会在 SD 卡上的文件中安装可执行文件系统,但第三方应用程序无法编写这些文件)

但是您可以将库写入内部 存储中的可写位置 - 不是您没有写入权限的 lib 目录,而是从 Context.getDir( ) 或 Context.getFilesDir(),然后使用完整路径和 .so 文件名加载它,使用 System.load() 而不是 System.loadLibrary()。

关于android - 如何在 android 2.1 上从 sd 卡加载 jni?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2826412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com