Android系统中的应用程序都是用Java开发的。Android NDK使我们能够在android上使用C/C++开发的原生代码。

有两个理由使用NDK: 一是合理的重用现有的代码;二是在程序中某些关键的部分提高执行效率。

使用Android NDK开发,除了普通Android开发环境外,还需要下载NDK包 和 安装Cygwin工具(windows环境下需要)。

Cygwin

Cygwin 是 Windows 上类似于 Linux 的环境。它包括一个提供 UNIX 功能性基本子集的 DLL 以及在这之上的一组工具。(所以在linux下不需要使用)

安装Cygwin的步骤如下:

1.下载setup.exe

到官网www.cygwin.com单击左边“Install Cygwin”。再点击中间“Setup.exe”这将下载一个小程序 setup.exe(250KB)。

Android ndk 开发环境搭建 和 示例_第1张图片

这个安装程序将在您的机器上引导 Cygwin 环境的安装或更新过程。

2.运行setup.exe,进行安装,如下图:
图 1. Cygwin 环境的安装向导

点击Next按钮。
选择下载位置
在这个页面上,选择"Install from Internet"。

图 2. 选择安装类型

一直点击Next按钮,一直到出现下图界面:


选择一个下载站点。因为这些站点是义务的镜像,所以选择一个下载点有点风险(通常它们是可用的,但有时不可用)。通常,试试离你比较近的那个站点。(有一个http://mirrors.163.com最快)

点击Next按钮。
选择包进行安装
在这个页面上,您将选择要安装的包。默认情况下,Cygwin 基本包将不安装 GCC,因此,您必须修改默认设置。
将鼠标移动到Devel边的加号(+)上,然后点击它展开Devel类。

Android ndk 开发环境搭建 和 示例_第2张图片

这一步,我们选择需要下载安装的组件包,为了使我们安装的Cygwin能够编译程序,我们需要安装gcc编译器,默认情况下,gcc并不会被安装,我们需要选中它来安装。为了安装gcc,我们用鼠标点开组件列表中的“Devel”分支,在该分支下,有很多组件,我们必须的是:

binutils
gcc
gcc-mingw
gdb

make

鼠标点击组件前面的循环按钮,会出现组建的版本日期,我们选择最新的版本安装,下图是选中后的四类组件的截图:

Android ndk 开发环境搭建 和 示例_第3张图片

binutils组件

Android ndk 开发环境搭建 和 示例_第4张图片

gcc组件


Android ndk 开发环境搭建 和 示例_第5张图片

如果gcc-mingw-core和gcc-mingw-g++找不到:就找mingw-gcc-core和mingw-gcc-g++

gcc-mingw组件

Android ndk 开发环境搭建 和 示例_第6张图片

gdb组件

Android ndk 开发环境搭建 和 示例_第7张图片

make组件

选完以后,我们选择下一步,进入安装过程,如下图所示,

Android ndk 开发环境搭建 和 示例_第8张图片

一直到下载完成,选择在桌面上建快捷方式,就ok了!

3.测试是否安装成功

运行cygwin,输入make -v 和 gcc -v 如果能找的,则表示安装成功。

安装NDK

安装ndk很简单,网上随便搜一下,只需要把下载的ndk文件解压缩到自已指定的目录即可。(如:我的路径为E:\android-ndk-r8b)

配置NDk

修改Cygwin目录(我的默认装在C:/cygwin/home/Administrator/.bash_profile文件,在文件末尾加入如下代码:

NDKROOT=/cygdrive/ndk文件的路径export NDK_ROOT
(例如我的如下:
NDKROOT=/cygdrive/e/android-ndk-r8bexport NDKROOT)

(注意:NDKROOT名字可以自己起,ndk文件路径是你 解压缩后ndk的路径,特别注意将斜杠换成反斜杠 和 去掉d:中的:(windows和linux路径区别问题))

五、 用 NDK 来编译程序
a.现在我们用安装好的 NDK 来编译一个简单的程序吧,我们选择 ndk 自带的例子 hello-jni ,我的位于E:\android-ndk-r6b\samples\hello-jni( 根据你具体的安装位置而定 ) ,
b.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r6b/samples/hello-jni ,进入到 E:\android-ndk-r6b\
samples\hello-jni 目录。
c.输入$ $NDK_ROOT/ndk-build (一定要在你需要编译的程序的目录下运行$NDK_ROOT /ndk-build,因为是
使用NDK编译你需要的工程,编译时会在你所在工程的jni目录找Android.mk文件来确定需要编译的文件),执行成功后,
它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK_ROOT是调用我们之前配置好的环境变
量, ndk-build 是调用 ndk 的编译程序 )
d.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,你的 ndk 就运行正常啦!

六、自己开发一个NDK程序样例:


a.在eclipse中新建一个android工程,命名为NDKTest,新建一个Jni.java文件:


package com.zy.ndktest;
public class Jni {
public native int getInt();
public native String getString ();
}


jni文件中除了native方法,还可以有java写的方法.


b.使用javah生成.h文件:
首先运行android程序以便编译生成class文件
打开cmd命令行窗口,进入项目的bin\classes 目录(如:cd D:\Eclipse\workspace\NDKTest\bin\classes)
运行javah -classpath . -jni com.zy.ndktest.Jni
会在 classes 目录下自动生成一个com_zy_ndktest_Jni.h文件


c.使用C语言实现本地方法
首先在项目目录中新建一个jni目录,再建com_zy_ndktest_Jni.c文件(实现com_zy_ndktest_Jni.h 中的2个
方法)
#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
int add2(){
int x,y;
x=1000;
y=8989;
x+=y;
return x;
}
JNIEXPORT jint JNICALL Java_com_zy_ndktest_Jni_getInt
(JNIEnv *env, jobject thiz){
return add2();
}
JNIEXPORT jstring JNICALL Java_com_zy_ndktest_Jni_getString
(JNIEnv *env, jobject thiz){
return (*env)->NewString UTF(env," HelloNDK----philn");
}


d.在jni下建立一个 Android.mk 文件,写入:


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NDKTest
LOCAL_SRC_FILES := com_zy_ndktest_Jni.c
include $(BUILD_SHARED_LIBRARY)


e.使用cygwin进入项目文件夹:
$ cd /cygdrive/d/Eclipse/workspace/NDKTest(我的NDKTest项目文件夹是:d/Eclipse/workspace/NDKTest)
运行命令:
$ $NDKROOT/ndk-build.cmd
在该项目下会自动生成libs\armeabi\libNDKTest.so文件
f. MainActivity中调用:
public class MainActivity extends Activity {
static{
System.loadLibrary("NDKTest");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Jni jni = new Jni();
TextView textView = new TextView(this);
textView.setText(jni.getString ()+":::"+jni.getInt());
setContentView(textView);
}
}
6.运行应用,可以看的出如下的效果

HelloNDK----philn:::9989

分类: Android NDK

更多相关文章

  1. Android开发5――文件读写
  2. android 获取uri的正确文件路径的办法
  3. Linux开发环境搭建 三 (在Ubuntu上Android/Linux编译环境的准备)
  4. 在android studio的虚拟机的sd卡上创建文件夹
  5. Android 使用decodeFile方法加载手机磁盘中的图片文件
  6. Android AudioRecord录音实时pcm 编码为 aac 文件
  7. android之android studio的NDK环境搭建

随机推荐

  1. TextView的走马灯效果
  2. Android开发中XML布局的常用属性说明
  3. ImageView的属性android:scaleType
  4. 自定义Android(安卓)标题栏TitleBar布局
  5. Android(安卓)EditText样式自定义
  6. Android(安卓)学习记录
  7. Android中RelativeLayout相关属性
  8. Android(安卓)错误 'roundIcon' in packa
  9. 从J2EE转向Android的第四天-----Android(
  10. android点击状态分析