AndroidNDK初步之如何调用jni及.so和mk的配置

这篇和上一节一样是个旧,因需要重新编辑略作补充,所以还继续使用Eclipse,短板NDK有了足够的也是对开发而言有好处的。上一节提到使用Eclipse安装NDK环境及JNI的配置,这节将说明AndroidNDK开发中如何调用JNI生成.so文件及配置方法,还有第三方so不被删除的方法。

一、Android如何调用jni生成.so文件及Android.mk的配置

  • 01

    调用JNI进行NDK开发,主要是编写C/C++代码,这里注意新版本NDK中,JNI默认新建的C文件类型是.cpp的,所以要在写函数前后加上如下代码: extern "C"{ } 再extern "C"{}大括号内部写函数体,具体代码如图所示。

  • 02

    写完C/C++代码之后,在项目中jni文件夹的.cpp文件同级还有个Android.mk文件,它是存放jni文件配置信息的,一般由系统自动生成,但为确保正确,还是最好检查一遍,你的Android.mk大概是如图的样子。

  • 03

    配置好Android.mk之后Build项目就可以生成.so文件了,开始回到项目代码,建立本地接口(实际上是一个类,相对jni而言是接口),为使程序中可以调用,代码如图所示。

二、Android项目使用第三方so文件不被删除的办法

  • 01

    如果你的项目中用到了第三方SDK,那么就会用到一些没有源码的.so文件,这是需要在Android.mk中配置,否则当你Build项目时是不会导出第三方的.so文件的,这时可以在Android.mk最后添加如图一句代码。

  • 02

    然后在项目的jni文件夹在新建一个文件夹,名称随意,比如叫prebuild,在里边新建Android.mk,也就是上一步指定的路径地址,打开Android.mk编写关联第三方.so文件的语句,参考如图的方式编写。

  • 03

    然后还要把所需要的第三方.so文件放到prebuild文件夹下,如图所示。

  • 04

    这时就可以Build、执行或者导出apk项目了,但这如果需要让程序支持更多的平台,你需要在jni目录下新建Application.mk文件,并输入如图中的语句。

  • 05

    到以上为止,你可以将.so放到每个平台文件夹下并编译项目了,但如果控制台报了一个说APP_PLATFORM版本高于AndroidManifest.xml中的minSdkVersion,那你就在Application.mk中添加类似如图的语句即可(让二者版本相同)。

  • 06

    最后,如果加载了某个第三方SDK之后,build项目时只会将.so导出到arm64-v8a、armeabi、armeabi-v7a这3个平台中,mips、mips64、x86、x86_64这4个平台会报错说不识别.so文件,或者其他类似问题的话,可以选择生成自己写JNI生成的.so后,从项目删掉C库,在没有JNI的情况下,去把所有.so文件放到libs里,再进行Build、执行或导出操作,这样就没有问题了,也就是最一般的做法。

(0)

相关推荐

  • 使用NDK进行开发android

    在eclips中配置NDK路径 在eclipse中点击菜单栏window-Perferences,配置NDK的路径。 在工程中添加native lib新建一个空白的Android工程,在根目录上点击右 ...

  • Win7下Redmine2.0.3+Mysql55+Ruby1.8.7成功安装记录分享

    准备软件: Ruby 下载网页: http://rubyforge.org/frs/?group_id=167&release_id=46836 http://files.rubyforge. ...

  • 思科路由器配置的特点

    一、I0S进程 I0S进程是一个在路由器上运行的特殊软件任务,主要用于实现某种功能。当我们将命令放人配置文件对I0S进行配置时,实际就相当于对构成10S各进程的行为加以控制,所有这些进程都在路由器上同 ...

  • MyEclipse如何配置MySQL JDBC驱动

    MyEclipse的数据库工具支持市面上大部分数据库,如"Oracle"."MySQL"."DB2"等,只需要配备相应的数据库驱动即可.其中 ...

  • c语言基础学习:[7]第三章: 程序设计初步

    C语言程序设计本课介绍C语言程序设计的基本方法和基本的程序语句.从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构.分支结构.循环结构. 这三种基本结构可以组成所有的各种复杂程序.C语言提供 ...

  • win8游戏管理器如何迅速找到并调用

    在windows7系统下有一个游戏管理器,是作为整合所有游戏的一个工具,对游戏玩家们来说是一个福利,但是在新的系统win8下,游戏玩家们却搜索不到这个功能,难道是win8去掉了这项功能?其实不是的,在 ...

  • linux小技巧:"启动器的shell脚本会调用xterm来运行" 的解决办法

    本文针对 Mate 1.8.1 桌面环境下,CentOS 7.0 (x86_64) 和 ArchLinux 2014.10.01 (x86_64) 版本,也同样适用于存在类似问题的其他发行版本。 (我 ...

  • Asp.net中用 AJAX调用后台静态的方法总结

    从客户端调用后台静态方法 1.Ajax Library方式 C#代码: [WebMethod] public static DateTime GetCurrentTime(string str) { ...

  • 让Windows系统自动调用保存在U盘中的收藏夹内容

    收藏夹中通常记录了自己的偏好与隐私信息,为了不让他人随意偷窥到这方面的隐私信息,很多人往往会将收藏下来的隐私内容保存到自己随身携带的U盘中,不过日后再想调用自己收藏的隐私内容时,就比较麻烦了,因为Wi ...