zoukankan      html  css  js  c++  java
  • windows下用ADT进行android NDK开发的具体教程(从环境搭建、配置到编译全过程)

            郑重申明:如需转载本博客,请注明出处,谢谢!

            这几天在学习android NDK的开发。那么首先让我们来看看android NDK开发的本质是什么。

            NDK(Native Development Kit),即本地开发工具,简单地说。就是在开发android应用程序的时候,在java类中调用native函数,而native函数的接口也是在java类中定义的,可是native函数终于由本地的C/C++代码实现。简单地说,就是在java中调用C/C++函数。

    至于为什么要用NDK,我总结了一下,大致有下面几方面原因:

            1.提升程序执行效率:众所周知。在处理复杂运算或者对速度、内存要求苛刻的程序中,C/C++比java的效率要高出非常多,比方人脸识别、OCR字符识别等图像处理程序,用C/C++实现无疑是首选。

            2.与硬件打交道:java之所以能跨平台,是由于全部的代码都是由JVM(java虚拟机)来解释的。这样就屏蔽了底层硬件体系结构的差异。

    可是假设我们的程序须要与底层硬件打交道,或者与驱动程序交互,那么就要用C/C++来写代码了。

            3.复用现有的程序:比方你有之前已经用C/C++实现了的程序,想移植到android平台上来,则能够直接通过NDK拿来用。不用再所有改写成java的。

            如今就来说说android NDK开发的一般步骤吧。

            一、准备工作:搭建android开发环境,包括jdk、ADT(新版的已经包括了eclipse IDE)、SDK等的下载安装,不会的自行百度,相关文章太多了,我在此不再赘述。

            二、在官网上下载NDK,网址:http://developer.android.com/tools/sdk/ndk/index.html。依据自己的操作系统平台(windows32或windows64或Linux或Mac)下载对应版本号的NDK,然后双击解压到对应的目录。

            三、新建一个普通的android应用程序注意最小支持的API版本号要>=14)。假设是新手,不清楚这个,能够百度、谷歌。

            四、在ADT开发环境中设置NDK的路径

                   点击Window菜单,选择Preference,点击Android展开后点击NDK,设置NDK路径,点击Apply,例如以下图所看到的:


             五、加入Native Support

             右键project。->Android Tools->Add Native Support。输入将要生成的.so文件的名字,点finish,例如以下图:


               六、设置C/C++的Paths and Symbols

             右键project,->Properties,点击C/C++ General展开,点击Path and Symbols,在右边Includes下。点击Add。把NDK目录下的jni头文件和对应的C++头文件加入进来。这一步很重要,否则会报错,详情请见我的还有一篇文章:http://blog.csdn.net/u013149325/article/details/40371873


              七、在project源文件的包中加入一个类,用于定义native函数接口。例如以下图:

              

              八、依据上一步中定义的接口,生成C/C++头文件

               能够用javah命令生成头文件,详见我的还有一篇文章:http://blog.csdn.net/u013149325/article/details/40263413,我一開始也是在cmd窗体下用javah命令生成的,后来发现直接在ADT中配置相关选项,就能够生成头文件。

    不得不说如今ADT太强大了。假设你的ADT不支持相关功能,能够下载最新版本号的。

               在菜单条中点Run->External Tools->External Tools Configurations,右键Program->New,在右边的main子窗体配置例如以下图,Name能够自己随便取一个名字。


    然后点Refresh。例如以下图勾选:

           

    再点Common,勾选例如以下:


    在菜单条button下点javah,就能够发如今jni目录以下生成了.h头文件,如右图

        九、编写C/C++源文件,编译生成.so文件

            .so文件事实上是Linux系统下的动态链接库,就相当于我们windows下的dll。而android系统是基于Linux的,所以会用到它。网上有非常多人建议用Cygwin来生成.so文件,本人亲自实验也成功了。可是能在ADT集成开发环境里面自己主动生成会更加方便。

           编译project后,在jni目录以下会生成一个与project同名的.cpp文件。打开它,在这里面编写C++代码。

    例如以下图:


            这里面要包括上一步生成的.h头文件,然后在这里面实现native函数。假设不理解JNIEnv *、jclass、jintArry这些类型,能够深入学习JNI编程相关知识。假设你须要多个.h和.cpp文件。仅仅要把它们都放在jni目录下就能够了。

            右键Project,Properties->Builders->New,新建立一个Builder

    在弹出的对话框上面点击Program,点击OK,在弹出的对话框【Edit Configuration】中,配置选项卡【Main】,Location中须要填入nkd-build.cmd的路径(NDK安装文件夹下)。WorkingDiretcoty中填入project根文件夹。例如以下图:


       配置选项卡【Refresh】:勾选“Refresh resources upon completion”,勾选“The entire workspace”。勾选“Recuresively include sub-folders”,例如以下图:


       

    配置选项卡【Build Options】: 勾选“After a “Clean””。 勾选“During manual builds”,勾选“During auto builds”,勾选“Specify working set of relevant resources”。例如以下图:


      在上图中,点击“Specify Resources…”勾选Testproject的“jni“文件夹。点Finish。再点OK保存。例如以下图:


          在project的jni目录以下新建一个Makefile类型的文件,文件名称为Application。

    (注:假设你不知道怎么新建Makefile类型的文件,能够把jni目录下的Android.mk文件在原地复制一份。然后重命名为Application。打开Application.mk之后改动里面的内容就可以)。

             例如以下图:


    编辑Application.mk文件,依据你的模拟器处理器类型和SDK级别添加例如以下两行。当中APP_ABI 指定处理器类型。能够指定多个。

         APP_ABI := armeabi-v7a
         APP_PLATFORM := android-19

           因为我们勾选了“During auto builds”,所以在project有所改变的时候,so文件便会自己主动编译。正确生成以后就能在project文件夹下发现多了一个libs文件夹,例如以下图:


           好了,android NDK程序的环境搭建配置、编译的具体流程到这里就结束了。我正在尝试android NDK中在C/C++源码中设置断点跟进去调试,等我调试成功了就再写博客与大家分享。
  • 相关阅读:
    PAT 甲级 1132 Cut Integer (20 分)
    AcWing 7.混合背包问题
    AcWing 9. 分组背包问题
    AcWing 5. 多重背包问题 II
    AcWing 3. 完全背包问题
    AcWing 4. 多重背包问题
    AcWing 2. 01背包问题
    AcWing 875. 快速幂
    AcWing 874. 筛法求欧拉函数
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6986284.html
Copyright © 2011-2022 走看看