• Windows平台下如何使用Android NDK


    鉴于有些同学想要学习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:cytwinin;”,

    如下图所示。

    clip_image002

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

    clip_image004

    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文件夹中的文件。)

    clip_image006

    四.开始使用

    1.在命令行窗口中进入cygwin目录,执行cygwin.bat

    2.进入android-ndk中的samples文件夹里的某个项目文件夹,这里以hello-jni为例

    进入文件夹的方式与MS-DOS类似,用cd + 空格 + 盘符+ 路径即可,例子见下图

    3.执行$NDK/ndk-build编译

    clip_image008

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

    clip_image010

    五.如何在自己的工程中使用NDK

    Android-ndk中的例子大家会编译了,那么在自己现有的工程想要调用本地方法应该怎么做呢?

    1.在JAVA代码中声明native方法,

    clip_image012

    2.生成头文件

    然后需要生成C或C++的源码,供JAVA调用。

    可以按照JNI的命名规则,也可以使用JDK的javah命令来生成,这里推荐使用javah,避免手动编写出现错误不好排查。

    javah命令的使用方法见javah命令的帮助

    clip_image014

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

    clip_image016

    clip_image018

    这个文件就是JAVA与本地代码交互的接口了,做C或C++的开发人员针对这个头文件开发。

    3. 编写本地方法

    在你的工程根目录下创建jni文件夹,并从android-ndksamples里的hello-jni文件夹中拷贝出一个Android.mk文件,粘贴到jni文件夹中,同时刚才用javah生成的.h头文件拷贝到jni文件夹中。

    首先创建一个.c文件,实现头文件中的方法,

    clip_image020

    然后编辑Android.mk文件,修改如下两行,第一行修改为你的工程名,第二行修改为你的.c或.cpp文件名

    LOCAL_MODULE := EX25_JNI

    LOCAL_SRC_FILES := org_yuchen_demo_MainActivity.c

    4.在java代码中加载so文件

    在java代码中用静态块加载so文件,注意把so文件的“lib”和“.so”扩展名去掉。

    clip_image022

    5.使用本地方法

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

    clip_image024

                                                                                 隋雨辰

                                                                                 2011-07-26

    本文出自 “雨辰专栏” 博客,请务必保留此出处http://yuchen.blog.51cto.com/2739238/623472

  • 相关阅读:
    android开发内存优化之软引用
    java 异步调用与多线程
    【转】生活中的OO智慧——大话面向对象五大原则
    Java算法 -- 顺序表
    Android 画闹钟
    Android 画指南针
    Android 工具类大全
    公共技术点之面向对象六大原则
    xml转对象1
    xml转对象
  • 原文地址:https://www.cnblogs.com/zjoch/p/3938613.html
Copyright © 2020-2023  润新知