android 加载 动态库问题

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


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


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

并修改android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := my

LOCAL_SRC_FILES := mylib/SuDoKuRule.c

LOCAL_PRELINK_MODULE := false
include $(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值