NDK安装教程转载三篇

一、转自:http://www.dovemoon.com/479.html

如何安装NDK环境到Eclipse中

 

在Android的游戏开发中,你迟早会发现有必要把部分代码跑得更快。用C写的Android代码比同样的Java版本,快上10~100倍。我可以证实这个事实,在我最新的3D游戏引擎中,我把部分组件用原生程序(即用C/C++写代码,编译成二进制的动态链接库文件)重写。

这样带来了极大的性能提升,但我们也不得不面对这么一个事实:Eclipse对Java的开发提供了极佳的支持的同时,对C的开发却极其糟糕。Eclipse不适合C的开发,对吗?错,现在向你展示如何在Eclipse中,建立一个快速的NDK开发环境。

       首先声明一点,Eclipse不仅仅适合于开发Java应用程序。Eclilpse为Java开发提供了极好的支持,它的设计初衷也是为了Java。但得益于它的设计架构,Eclipse能够为包括C语言在内的任何语言的开发提供支持。一个名为CDT的插件,使得在Eclipse里能对C/C++进行开发。尽管我说得有些过了头。接下来这些,是你所需要的:

Android NDK(Native Development Kit) 
Eclipse CDT(C Development Tooling)

如果用的是windows操作系统,你需要安装Cygwin,并安装上重要的包(特别是GCC和Make)。

       接下来的步骤是:

       安装上述三个包。我把NDK安装到C:/Android_NDK。在后面的文章中,我都默认为该目录是NDK的安装目录。

       为了熟悉NDK,在C:/Android_NDK/apps目录中,你需要配置每个项目的“app”。就像NDK中的例子一样,它们能够正确编译运行,并要求严格的配置。

       测试NDK的办法:

       启动cygwin

       cd /cygdrive/c/Android_NDK

       make APP=hello-jni

       根据上述的步骤,你将能够正确编译。如果cygwin漏装了GCC、Make或者其它开发包,你有必要重新安装Cygwin,并且确保全部必要的开发包已经安装。如果你遇到什么特殊的错误,我建议把这些错误报告给NDK用户组。

       一旦NDK能够正常工作,你就能够添加和配置好你的NDK开发项目。参考NDK的example一样,你需要一个详细的build文件(Android.mk),该文件告诉NDK编译器编译什么文件。JNI代码文件通常放在应用程序项目的jni文件夹下。该目录下的Android.mk文件指引NDK编译器如何编译程序。

       在完成这些基本配置后,你会想去写C代码。NDK使用Java标准的JNI技术实现。大量的关于JNI的文档在这里都适用。怎样去编写JNI代码,已经超出了本文的范畴。

       接下来是有用的部分:

       如果开发过NDK程序,你很有可能习惯使用文本编辑器或者vim去编辑的你C/C++代码,然后使用make APP=myapp的命令来编译,接着点击更新在Eclipse中的项目,最后盼望着那已部署上的共享库是最新的。多么痛苦的一件事啊!其实,有一个更好的方法。

       目前,已经安装上了CDT,你就可以在Eclipse中编译你的C/C++文件。右击C/C++源文件,选择使用C/C++编辑器打开,就能够使用CDT编译器了。多友好!因为尚未编译C/C++源文件,你并不清楚代码正确与否。但这也使得你更友好地在一个界面下编辑代码。

       生成项目也是快速而灵活的。你曾经使用过Eclipse的生成器吗?它们是一些可配置的开关,用于执行你所配置的命令和刷新工程资源。以下是我的配置:

       右击你的项目,选择“properties”

       在左边的列表中选择“Builders”

       在右侧,点击“New…”按钮

       在列表框,选择“Program”作为配置类型;点击“OK”按钮,进入下一个配置对话框。

       命名name为“Native Builder”

       选择Location为“c:/cygwin/bin/bash.exe”

       “Working Directory”为“c:/cygwin/bin”

       “Arguments”为:

–login –c “cd /cygdrive/c/Android_NDK && make APP=myapp”

确保在login前有两个连接号,-c后面的引号。

       接着打开“refresh”的tab面板:

       选中“Refresh resources upon completion”

       选择“Specific resources”

       点击“Specify resources”按钮,选择你项目的lib目录

       选中“Recursively include sub-folders”

       接着打开“Build Options”的tab面板:

       选中“Allocate Console”

       选中“Launch in background”

       选中“Run the builder After a Clean”

       选中“Run the builder During manual builds”

       选中“Run the builder During auto builds”

       选中“Specify working set of relevant resources”

       点击“Specify Resources”按钮,选择你项目的JNI目录,并包含所有的文件。

       点击“OK”按钮。

       这里假设:cygwin安装在c:/cygwin;NDK安装在c:/Android_NDK;项目工程名称是“myapp”。根据你的安装配置,相应地替换这些参数。

       你刚刚做了什么呢?你使得,在JNI的目录下,每次修改任何文件,Eclipse都通过cygwin自动启动NDK编译你的工程,并在控制台输出编译信息。当它编译完成,将自动刷新工程输出目录(lib),并触发ADT生成一个新的APK安装包。这一切都极其简便。

       把NDK集成到Eclipse,实实在在地加速了我当前项目的开发进度。希望你能够在文本中受益。

 

 

二、转自:http://www.pcyyjs.com/sys/Ubuntu/3643/

Ubuntu下搭建Android NDK开发环境

我们应该如何在Ubuntu 系统下搭建Android NDK 开发环境呢?下面一步一步教大家

     步骤1.下载NDK(注意我下载的是r4版本):

  http://dl.google.com/android/ndk/android-ndk-r4b-linux-x86.zip

 

  步骤2.下载完成后,解压到 ~/ 目录下:

  $echo $HOME <-- 查看当前用户目录,即 ~/ 目录路径

  /home/wzhnsc

  $pwd <-- 查看当前路径

  /home/wzhnsc/android-ndk-r4b

  注:如上路径是我解压 android-ndk-r4b-linux-x86.zip 后的 android-ndk-r4b 目录路径

  步骤3.首先进入 /home/wzhnsc/android-ndk-r4b 目录,

  此目录下有个 README.TXT 文件,里面提到了:

  在 docs/STABLE-APIS.TXT 里面是 APIs 的文档,

  在 docs/INSTALL.TXT 里面是如何安装NDK

  (以前的版本都需要运行 build/host-setup.sh 来进行初始化,

  这个 android-ndk-r4b 版本把它去除了,使用更方便了,只是像如下配置一下环境变量即可 ),

  在 docs/HOWTO.TXT 里面是如何使用NDK。

  注:建议这些文档都看一遍,有个大概了解。

  步骤4.配置NDK的环境变量

  $gedit ~/.bashrc

  注:在打开的文件末尾添加,如下内容

  NDK=~/android-ndk-r4b

  export NDK

  步骤5.在当前 bash 环境下读取并执行 ~/.bashrc 中的命令:

  $source ~/.bashrc

  或 (source命令也称为“点命令”,也就是一个点符号(.)。)

  $. ~/.bashrc

  步骤6.然后查看是否生效:

  $echo $NDK

  /home/wzhnsc/android-ndk-r4b/

  步骤7.编译有两种方法:

  1)在目标工程目录下编译:

  $cd /home/wzhnsc/android-ndk-r4b/samples/hello-jni

  进入例子目录

  $NDK/ndk-build

  然后在当前目录下执行 /home/wzhnsc/android-ndk-r4b/ndk-build 脚本

 

  2)在任意目录下编译:

  $NDK/ndk-build -C /home/wzhnsc/android-ndk-r4b/samples/hello-jni

  用 -C 指出工程目录路径

 

  注:无论哪种编译,成功后就会在当前目录下多生成 libs 与 obj 两个子目录。

 

  步骤8.打开 eclipse 导入 hello-jni 工程 ,就能看到效果了。

 

 

三、本文转自http://aswang.iteye.com/blog/1033238

1、下载android-ndk r5b
$wget  http://dl.google.com/android/ndk/android-ndk-r5b-linux-x86.tar.bz2


2、将下载的ndk解压到某个目录:
$tar -xvf  android-ndk-r5b-linux-x86.tar.bz2


3、修改当前用户的.profile,添加PATH

NDK=/home/lql/android-ndk-r5b
export NDK
PATH=$NDK:$PATH
export PATH
然后注销当前用户,重新登录,echo $PATH,看看PATH中有没有包含NDK

4、编写一个简单的例子
在eclipse里面新建一个hello android项目:
Java代码 

<ol start="1" class="dp-j" style="font-size: 12px; line-height: 1.4em; margin: 0px 0px 1px; padding: 2px 0px; border: 1px solid rgb(209, 215, 220); list-style-position: initial; list-style-image: initial; color: rgb(43, 145, 175); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;"><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">public</span> <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">class</span> Hello <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">extends</span> Activity {  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">      </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">    <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">public</span> <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">native</span> String hello();  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">      </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">    <span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px;">/** Called when the activity is first created. */</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">    <span class="annotation" style="color: rgb(100, 100, 100);">@Override</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">    <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">public</span> <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">void</span> onCreate(Bundle savedInstanceState) {  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">        <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">super</span>.onCreate(savedInstanceState);  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">        setContentView(R.layout.main);  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">        String hello = hello();  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">          </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">        <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">final</span> TextView view = (TextView)findViewById(R.id.view);  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">        view.setText(hello);  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">    }  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">      </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">    <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">static</span>{  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">        System.loadLibrary(<span class="string" style="color: blue;">"hello"</span>);  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">    }  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">} </span></li></ol>


5、到项目的bin目录下:
执行:javah -jni com.lql.Hello
会在该目录下生成一个.h文件:
com_lql_Hello.h 内容如下:
C代码

<ol start="1" class="dp-cpp" style="font-size: 12px; line-height: 1.4em; margin: 0px 0px 1px; padding: 2px 0px; border: 1px solid rgb(209, 215, 220); list-style-position: initial; list-style-image: initial; color: rgb(43, 145, 175); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;"><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px;">/* DO NOT EDIT THIS FILE - it is machine generated */</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#include <jni.h></span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px;">/* Header for class com_lql_Hello */</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#ifndef _Included_com_lql_Hello</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#define _Included_com_lql_Hello</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#ifdef __cplusplus</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">extern</span> <span class="string" style="color: blue;">"C"</span> {  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#endif</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px;">/*</span> </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px;"> * Class:     com_lql_Hello</span> </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px;"> * Method:    hello</span> </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px;"> * Signature: ()Ljava/lang/String;</span> </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px;"> */</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">JNIEXPORT jstring JNICALL Java_com_lql_Hello_hello  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  (JNIEnv *, jobject);  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#ifdef __cplusplus</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">}  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#endif</span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#endif</span>  </span></li></ol>


6、在该目录下编写一个com_lql_Hello.c文件,内容如下:

C代码

<ol start="1" class="dp-cpp" style="font-size: 12px; line-height: 1.4em; margin: 0px 0px 1px; padding: 2px 0px; border: 1px solid rgb(209, 215, 220); list-style-position: initial; list-style-image: initial; color: rgb(43, 145, 175); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;"><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#include <jni.h></span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;"><span class="preprocessor" style="color: gray;">#include <string.h></span>  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">JNIEXPORT jstring JNICALL Java_com_lql_Hello_hello  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  (JNIEnv *env, jobject thiz)  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">{  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">    <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold;">return</span> (*env)->NewStringUTF(env,<span class="string" style="color: blue;">"Hello JNI"</span>);  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">}  </span></li></ol>


7、将com_lql_Hello.c拷贝到jni目录,同时在该目录下新建Android,mk文件,内容如下:
C代码

<ol start="1" class="dp-cpp" style="font-size: 12px; line-height: 1.4em; margin: 0px 0px 1px; padding: 2px 0px; border: 1px solid rgb(209, 215, 220); list-style-position: initial; list-style-image: initial; color: rgb(43, 145, 175); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;"><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">LOCAL_PATH:= $(call my-dir)  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">include $(CLEAR_VARS)  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">LOCAL_MODULE    := hello  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">LOCAL_SRC_FILES := com_lql_Hello.c  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); line-height: 18px; background-color: rgb(250, 250, 250);"><span style="color: black;">include $(BUILD_SHARED_LIBRARY)  </span></li></ol>


8、在终端下编译该项目:

$cd  hello/jni
$ndk-build
结果如下:
lql@lql-laptop:~/workspace/hello/jni$ ndk-build
Compile thumb  : hello <= com_lql_Hello.c
SharedLibrary  : libhello.so
Install        : libhello.so => libs/armeabi/libhello.so

9、编译之后,会在hello下面生成libs目录,该目录下包armeabi/libhello.so
在eclipse中刷新项目,然后在模拟器中运行:
会在activity中显示如下内容:
Hello JNI

到此,第一个ndk项目完成!



你可能感兴趣的:(NDK安装教程转载三篇)