android 加载 动态库问题

来源:互联网 发布:重复文件查找 知乎 编辑:程序博客网 时间:2024/06/02 08:09

当需要将第三方代码加入我们的android工程时,或者为了增加反编译难度等原因需要编译动态库.so文件,就要注意以下几点:


首先是编译出.so ,这时其实也可以编译成静态库然后链入最终的.so中。


编译.so需要在android工程的jni中放入源文件(gcc,clang对纯C语法的检查很不严格啊?好多C语法错误是在win下编译才发现的,所以最好好好检查,以防今后使用中出现奇怪问题),

并修改android.mk:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := myLOCAL_SRC_FILES := mylib/SuDoKuRule.cLOCAL_PRELINK_MODULE := falseinclude $(BUILD_SHARED_LIBRARY)

如果顺利,build工程后会在libs/armeabi下生成.so


然后就是使用.so(如果刚才选择了编译静态库,那么使用起来就很简单了,只要包含头文件即可,静态库已经连接到工程的.so中了)

    auto h = dlopen("/data/data/com.shangyou.suduku3/lib/libmy.so", RTLD_LAZY);    CCLog("liujianlog : h : %d" , h);    auto isValueEffectiveInLineX =(BOOL(*)(int,int,cCell*,int)) dlsym(h, "isValueEffectiveInLineX");

android中.so会拷贝到应用的目录下,必须使用绝对路径,(有一种方法可以在这里使用相对路径,就是先执行syste.loadlibary(“my”),参考:http://my.oschina.net/wolfcs/blog/129696

运行,OK


重要参考:http://bbs.csdn.net/topics/390116876

System.loadLibrary 加载路径

Android NDK学习 <六> 复杂结构动态库处理和第三方库的移植


0 0
原创粉丝点击