Android下用NDK显式调用.so文件初探
来源:互联网 发布:单片机照明控制现状 编辑:程序博客网 时间:2024/06/15 22:02
本人是Windows程序猿出身,比较喜欢Windows下的.lib和.dll体制,转到Cocos2dx后也想尝试这种体制,刚刚研究了下把自己写的.so引入Android工程并显式调用(用dlopen函数打开),有了点结果特地写出来。
自己写的.so要通知Android工程,不然编译时不会放进apk文件里的,就算你把文件放进libs目录也不行。
具体办法是在项目的jni目录下建立一个prebuild目录,把.so文件放进去,如下所示
图上可以看出有多个平台的文件在相对应的目录里。
编写Android.mk文件放在prebuild目录下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := classTLOCAL_SRC_FILES := classT/$(TARGET_ARCH_ABI)/libclassT.so include $(PREBUILT_SHARED_LIBRARY)如果要添加多个库则重复
include $(CLEAR_VARS)
include $(PREBUILT_SHARED_LIBRARY)
之间的内容即可
在下目测在编译不同版本时会重复调用Android.mk,所以$(TARGET_ARCH_ABI)/libclassT.so 只用写一遍即可。
之后在jni目录下(一般NDK开发设置下)的Android.mk的最后添加
include $(LOCAL_PATH)/prebuild/android.mk
由于我是要动态调用so,所以LOCAL_SHARED_LIBRARIES是屏蔽的。
调用.so文件的C代码大致如下:
#include <jni.h> #include <dlfcn.h> #ifdef __cplusplusextern "C" {#endifvoid loadso(){void *handle = dlopen("/data/data/com.example.imptest/lib/libclassT.so", RTLD_LAZY);}}#ifdef __cplusplus}#endif
之后dlsym,dlclose
的用法和Linux的用法一样,关键是要找准.so的文件。
另我看到说Linux下可以给编译器加参数来在.so中导出类定义,在安卓下我不知如何设置,望有知道的高人不吝赐教,谢谢!
阅读全文
0 0
- Android下用NDK显式调用.so文件初探
- 【Googel官方】android studio下ndk编译so文件初探
- Windows下编译使用Android NDK,调用SO文件
- Android NDK 生成、调用so文件
- 小白Windows下编译使用Android NDK,调用SO文件
- Eclipse下NDK开发(java调用so文件)
- Eclipse下NDK开发(java调用so文件)
- Eclipse下NDK开发(java调用so文件)
- Android NDK学习(5)调用.so文件
- android ndk 怎样调用第三方的so库文件
- Ubuntu下Android NDK配置及生成so文件步骤
- Android NDK生成so文件
- Android-NDK编译.so文件
- 初探 Ubuntu下android NDK
- NDK 通过java调用so文件
- Eclipse下用NDK编译生成so文件
- Eclipse下用NDK编译生成so文件
- Eclipse下用NDK编译生成so文件
- 自封装JedisUtil
- Netty的线程模型
- 牛客网模拟测试 3 道编程题
- 五种数据结构的单元test---需复合封装的JedisUtil使用
- MATLAB通过命令重命名
- Android下用NDK显式调用.so文件初探
- 网络层
- Excel VBA高效办公应用-第十一章-教师员工数据管理-Part1 (教师考核评测数据处理)
- 如何统计广告投放效果
- easyui之validatebox控件分析
- 1003. 我要通过!
- Python爬虫实战之抓取淘宝MM照片(二)
- POJ3620DFS
- js的内置对象