设为首页 收藏本站
查看: 763|回复: 0

[经验分享] Windows平台下如何使用Android NDK

[复制链接]

尚未签到

发表于 2018-6-10 12:19:38 | 显示全部楼层 |阅读模式
  鉴于有些同学想要学习NDK,但在网上很难找到一个讲解比较清楚、按照步骤操作可以比较顺利学会NDK的文章,所以写了此篇教程。
  一.学习本篇教程需要具备的条件:
  1. 了解JAVA中JNI的概念、好处以及使用方法,网上很多介绍,这里就不重复了。
  2. 你的电脑配置好了Android应用开发环境,即:JAVA、Eclipse、ADT和Android SDK。
  二.准备
  需要Android NDK和windows下c、c++代码的编译器cygwin
  android-ndk-r6-windows.zip下载地址:http://u.115.com/file/clvyxr0b
  cygwin下载地址:http://u.115.com/file/clvy46eb
  三.配置
  1. 解压缩NDK和cygwin,并配置cygwin的环境变量。
  例如:我解压缩到D盘根目录,那么在环境变量的path中添加:”D:\cytwin\bin;”,
  如下图所示。
DSC0000.jpg

  2. 在命令行中进入cygwin目录,并执行cygwin.bat,如果你不是用Administrator账号登录的系统,那么会在cygwin\home\文件夹中生成一个以你的登录名命名的新的文件夹。
DSC0001.jpg

  3. 修改新生成文件夹中的“.bash_profile ”文件,用UE或editplus等文本编辑器打开,在最后增加:
  NDK=/cygdrive/d/android-ndk-r6
  export NDK
  然后保存关闭。
  d/android-ndk-r6表示ndk在d盘,如果你的ndk放到了其他盘符或路径,例如放到e:\sdk目录中,那么就改为e/sdk/android-ndk-r6。
  (如果是Administrator账号登录,直接修改Administrator文件夹中的文件。)
DSC0002.jpg

  四.开始使用
  1.在命令行窗口中进入cygwin目录,执行cygwin.bat
  2.进入android-ndk中的samples文件夹里的某个项目文件夹,这里以hello-jni为例
  进入文件夹的方式与MS-DOS类似,用cd + 空格 + 盘符+ 路径即可,例子见下图
  3.执行$NDK/ndk-build编译
DSC0003.jpg

  4.例子编译成功后导入Eclipse中,编译并部署测试如图:
DSC0004.jpg

  五.如何在自己的工程中使用NDK
  Android-ndk中的例子大家会编译了,那么在自己现有的工程想要调用本地方法应该怎么做呢?
  1.在JAVA代码中声明native方法,
DSC0005.jpg

  2.生成头文件
  然后需要生成C或C++的源码,供JAVA调用。
  可以按照JNI的命名规则,也可以使用JDK的javah命令来生成,这里推荐使用javah,避免手动编写出现错误不好排查。
  javah命令的使用方法见javah命令的帮助
DSC0006.jpg

  这里以我的测试工程为例,编写好native方法后,编译工程,eclipse会在bin目录生成.class文件,在命令行中进入bin目录,执行javah + 包名 + 类名,会在bin目录下生成一个头文件。
DSC0007.jpg

DSC0008.jpg

  这个文件就是JAVA与本地代码交互的接口了,做C或C++的开发人员针对这个头文件开发。
  3. 编写本地方法
  在你的工程根目录下创建jni文件夹,并从android-ndk\samples里的hello-jni文件夹中拷贝出一个Android.mk文件,粘贴到jni文件夹中,同时刚才用javah生成的.h头文件拷贝到jni文件夹中。
  首先创建一个.c文件,实现头文件中的方法,
DSC0009.jpg

  然后编辑Android.mk文件,修改如下两行,第一行修改为你的工程名,第二行修改为你的.c或.cpp文件名
  LOCAL_MODULE := EX25_JNI
  LOCAL_SRC_FILES := org_yuchen_demo_MainActivity.c
  4.在java代码中加载so文件
  在java代码中用静态块加载so文件,注意把so文件的“lib”和“.so”扩展名去掉。
DSC00010.jpg

  5.使用本地方法
  接下来在java中可以调用本地方法进行测试了。按照前面讲解的方法编译,打包部署测试,截图如下:
DSC00011.jpg

  

  隋雨辰
  2011-07-26

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-521735-1-1.html 上篇帖子: rsync在windows与windows服务器之间的同步设置 下篇帖子: VMM2012应用指南之13
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表