当前位置:首页 » 安卓系统 » android加载so失败

android加载so失败

发布时间: 2025-03-10 05:17:02

① android在用System.load()加载so文件时出现已经加载到内存错误,如何解决

这要看你在c++代码里有没有没释放的内存了。毕竟能成功运行一次,说明编译没错误,配置也没错误。看检察一下你的c++代码。

② 请教关于android linux动态库.so的加载调用

有这两种办法:
第一种:
需求:
有时候应用修复了native层一个小BUG,应用需要更新了,但是用户必须下载整个APK包进行安装,而我们需要的只是替换SO
于是想,能不能加载自定义路径下的 SO 文件呢
答案是完全没问题:
使用系统方法:
void java.lang.System.load(String pathName)
但是有一点,pathName 路径必须有执行权限,意思就是说我们不能加载SD卡上的SO,因为没有执行权限
那也没关系,我们复制到应用私有目录下就OK嘛。
看码
private void load() {
File dir = getDir("libs", Context.MODE_PRIVATE);
File soFile = new File(dir, "libTestJNI.so");
FileUtils.assetToFile(this, "libTestJNI.so", soFile);

try {
System.load(soFile.getAbsolutePath());
} catch (Exception e) {
}
}
这样就完全OK,
我们只需要架个服务器,每次启动时动态监测 SO 文件有没有更新,有则下载SO,然后加载,这样就可以避免用户安装新的应用,
要知道重新安装应用的用户体验是很差的,要让用户无感知的更新他。
第二种:
采用dlopen动态加载第三方库,无非和system.load一样,就是要实现指定路径加载so的目的,这种方法升级so的话,那就的需要一个基本so,一直不变,用来调用dlopen,然后升级另一个so。
这两种办法都会遇到一个问题,就是不能直接加载SD卡中的so,因为sd卡没有执行权限,不能直接加载这种二进制文件,需要拷贝到data/data/packagename/files/ 目录下,再次进行加载即可,拷贝也是有讲究的,需要用到context.openFileOutput方法。

热点内容
java编译路径设置 发布:2025-05-01 11:11:39 浏览:462
phporaclelinux 发布:2025-05-01 11:11:34 浏览:172
android取字符串 发布:2025-05-01 11:10:52 浏览:72
安卓手机里面的收藏在哪里 发布:2025-05-01 11:04:56 浏览:947
sql表重建索引 发布:2025-05-01 11:04:56 浏览:143
服务器网站搭建后不见了 发布:2025-05-01 11:04:54 浏览:161
android滑动切换界面 发布:2025-05-01 11:03:27 浏览:611
上传视频到yy 发布:2025-05-01 10:56:22 浏览:589
开流量看缓存好的视频会耗流量吗 发布:2025-05-01 10:56:18 浏览:980
电脑如何自动输入游戏账号密码 发布:2025-05-01 10:55:37 浏览:586