ndk中调用已有的so生成新的so

ndk中调用已有的so生成新的so

ID:8807477

大小:42.50 KB

页数:8页

时间:2018-04-08

ndk中调用已有的so生成新的so_第1页
ndk中调用已有的so生成新的so_第2页
ndk中调用已有的so生成新的so_第3页
ndk中调用已有的so生成新的so_第4页
ndk中调用已有的so生成新的so_第5页
资源描述:

《ndk中调用已有的so生成新的so》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、NDK中调用已有的so生成新的so这两天,头不在,背其他开发组的老大抓去做苦力,大概任务就是,用NDK,新生成一个so来调用已有so文件中的功能。开始一头雾水,因为对NDK,写makefile不很熟悉,大概看了NDK里两个例子之后,没有提到调用已有的so,于是搜索了一下,看到一篇文章中的内容基本说明了我要做的事情,(非常感谢)http://blog.csdn.net/vrix/archive/2010/03/06/5351196.aspx最后在这篇文章的帮助下,算是完成了任务。这里记载一下,记性差。老忘事情

2、。。说明:同样对这个问题不很熟悉的同学可以看一下。希望有所帮助。比如。已有一个so文件,名为"libold.so"。其中有方法"intoldmethod()"。现在由于某些原因,接口变化,或根本不知道old.so中接口,但要用到oldmethod方法,因此,用一个新的接口,若接口为"jintJava_com_example_newmethod(JNIEnv*,jobject)"生成新的so文件,来使用。mynewlib.c文件如下:#include#include#incl

3、udejintJava_com_example_tnewmethod((JNIEnv*env,jobjectthiz){void* filehandle=dlopen("/data/data/com.example/lib/libold.so",RTLD_LAZY);//打开原so文件if(filehandle)   {   int(*oldmethod)();   oldmethod=dlsym(filehandle,"oldmethod");//引入原so中的函数   if(oldme

4、thod)       {           //调用该函数       }   }}这里的dlopen和dlsym是android中/system/lib下libdl.so中的函数。因此需要把这个文件从android中导出,在模拟器中直接pull就可以了。之后在编译so时没有link到这个so,编译会失败。有了该文件后,Android.mk如下:LOCAL_PATH:=$(callmy-dir)LOCAL_MODULE:=my-new-libLOCAL_SRC_FILES:=mynewlib.c#这里l

5、ink了libdl.so,好像放在ANDROID_NDK_ROOT路径下,不对的话,看编译出错的信息也能够找到正确的路径吧LOCAL_LDLIBS:=-L.-ldlinclude$(BUILD_SHARED_LIBRARY)大致就是这样吧。由于家里没有环境,草草写这些,基本上引用的那篇文章中也写到了。很晚了~就这样吧从网上看了一篇使用andriod的toolchain在cygwin上来建立android的开发环境,但是在vista上编译始终失败,在xp上能够成功。但是编译的时间比较长,而且对于新手来说也比较

6、麻烦,难道就没有简单的方法吗?google已经把andriod的ndk已经放出来了,所以我就想着打它的主意了,把它配置一下,就能来开发c的程序了。旁边小伙肯定笑了,“搞啥?,有病啊,ndk就是一个开发nativecode的环境。”大哥,我当然知道了,虽然使用ndk来开发nativecode相对容易,但是它的.mk文件我看的是云里雾里,我本来想调用自己写的另外一个so库,都不知道在.mk文件里如何写,我现在也懒的去看ndk里面的mk文件,等哪天(哪天?天晓得是哪一天)有空了好好研究一下。好了,闲话少说,开练吧

7、。首先安装cygwin,这个网上的教程多的是,就不说了,接着下载androidndk,这个在andriod的官网上就有了,然后下载一个从android模拟器里取systemlib的工具busybox,然后调用命令$adbpushbusybox/dev/sample/busybox$adbshellchmod777/dev/sample/busybox$adbshell./dev/sample/busyboxtar-cf/dev/sample/libs.tar/system/lib$adbpull/dev/s

8、ample/libs.tarlibs.tar这样就将模拟器下的/system/lib目录的所有库(so)文件打包并下载下来了,解压libs.tar就得到了我们所需要的所有库文件。接着将所有的文件copy到$(NDK)/build/prebuilt/windows/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1,好了,这个时候基本的配置工作就结束了,怎么样简单多了吧。接着编写一个简单的c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。