Android NDK加载SD卡中的so
最近公司框架刚移植完成,由于框架程序要调用子程序,每个子程序都是一个so文件,有好几百个,把所有的so和apk打包不现实,及时可以升级维护也很麻烦。所以需要放SD卡中。考虑两种方式
1
放到设备中的 /data/app-lib/包名/so文件 (还有一个默认路径不记得了)程序程序初始化的时候 复制到这个路径中,loadlibrary时会从两个默认路径中加载。
这种方式设备需要root,效率比较低,如果应用被卸载了所有的so都没了。
2
直接放到SD卡中 通过dlopen 打开SD卡中的so 然后dlsym 查找函数地址
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include dlfcn.h//dlopen 头文件void (*pf_threadcannback)();//声明函数指针类型void (*pf_program)(); void *handle;bool getMethod() { handle = dlopen(//storage//emulated//0//lib//libprogram.so, RTLD_NOW); // dlopen(/storage/emulated/0/lib/libtwolib-second.so,RTLD_NOW); if (!handle) { __android_log_print(ANDROID_LOG_INFO, JNIMsg, Your params is null:%s, dlerror()); } else { __android_log_print(ANDROID_LOG_INFO, JNIMsg, Your params is GOOD2); } pf_program = dlsym(handle, <span font-family:="" font-size:="" line-height:="" style="color:">myFunc</span>); //指向so中你想要调用的函数名称 pf_threadcannback = dlsym(handle, ThreadCallBack); if (dlerror()) { __android_log_print(ANDROID_LOG_INFO, JNIMsg, dlsym no error); return false; } return true; // 释放资源 建议程序退出时调用 // dlclose(handle);} |
|
1
|
|
找到了函数地址接下来直接执行
比如想调用so中的 myFunc()函数 执行 pf_program()就ok了
结伴旅游,一个免费的交友网站:www.jieberu.com
推推族,免费得门票,游景区:www.tuituizu.com
Android NDK加载SD卡中的so的更多相关文章
- Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等
此案例主要说的是Android使用GridView加载SD卡下所有目录,文件夹多层遍历,文件图标修改,设置文件对应打开方式等功能. 如图: 代码: public class GridViewFile ...
- 【转载】cocos2dx 中 Android NDK 加载动态库的问题
原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...
- android保存文件到SD卡中
想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...
- 动态加载sd卡或者手机内置存储卡的so库
package com.wsc.utils; import android.content.Context; import com.wsc.common.Entrance; import com.ws ...
- listview异步加载sd卡图片
package com.example.gridview; import java.io.File; import java.io.FileOutputStream; import java.io.I ...
- Android -- 写xml到SD卡中
信息类 private ...
- Android ndk 加载简单的gif 图像
首先获取一个安卓权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> ...
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...
- Android 动态加载 (二) 态加载机制 案例二
探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法 重要说明 在实践的过程中大家都会发现资源引用的问题,这里重点声明两点: 1. 资源文件是不能直接inflate的,如果简单的话直接在程序 ...
随机推荐
- conda查找安装包的版本以及安装特定版本的包
如下图 想要安装特定版本的torchvision,然后conda search torchvision,能够列出conda云上所有的安装包 然后,安装包的时候,conda install 包名=版本就 ...
- centos7重启网卡报Job for network.service failed because...错误
解决: [root@mina0 hadoop]# systemctl stop NetworkManager[root@mina0 hadoop]# systemctl disable Network ...
- 适配器 1、ArrayAdapter 2.SimpleAdapter
1.ArrayAdapter(数组适配器):用于绑定格式单一的数据.数据源:可以是集合或数组 public class MainActivity extends AppCompatActivity { ...
- webserver技术总结之一:webserver概念
WebService的简介, 原理, 使用,流程图 第一部分: 直观概述 WebService的几种概念: 以HTTP协议为基础,通过XML进行客户端和服务器端通信的框架/组件 两个关键点: 1. ...
- dedecms织梦后台发布文章提示“标题不能为空”的解决办法
V5.7登录后台后,发布英文标题没问题,发布中文会提示“标题不能为空”. 原因:htmlspecialchars在php5.4默认为utf8编码,gbk编码字符串经 htmlspecialchars ...
- 配置LANMP环境(6)-- 安装APACHE与PHP配置
一.安装 Apache 2.4 安装:默认安装2.4版本 yum install httpd 修改配置 vim /etc/httpd/conf/httpd.conf 42行80端口改为 8080查看行 ...
- Windows下Redis如何永久更改密码
公司使用的是Spring-session-redis 需要给Redis配置一个密码 本来我配置密码的方法是 先打开Redis服务 在采用 命令 CONFIG SET requirepass " ...
- hexo个人博客添加宠物/鼠标点击效果/博客管理
1.添加宠物 博客宠物模型:https://github.com/xiazeyu/live2d-widget-models 模型对应的动画效果:https://huaji8.top/post/live ...
- Centos7网卡配置命令nmcli
在配置Centos6时,大家第一想到的就是把networkManager这个服务关掉,让它消失,这个服务台太鸡肋了,不该起作用的时候经常起作用,给管理带来了不便,但是在Centos7当中network ...
- python wechat
Python _ithcat持续登陆问题(itchat.auto_login(hotReload=True) https://blog.csdn.net/weixin_43886198/article ...