Android ndk 开发环境搭建 和 示例
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)。
这个安装程序将在您的机器上引导 Cygwin 环境的安装或更新过程。
2.运行setup.exe,进行安装,如下图:
图 1. Cygwin 环境的安装向导
点击Next按钮。
选择下载位置
在这个页面上,选择"Install from Internet"。
图 2. 选择安装类型
一直点击Next按钮,一直到出现下图界面:
选择一个下载站点。因为这些站点是义务的镜像,所以选择一个下载点有点风险(通常它们是可用的,但有时不可用)。通常,试试离你比较近的那个站点。(有一个http://mirrors.163.com最快)
点击Next按钮。
选择包进行安装
在这个页面上,您将选择要安装的包。默认情况下,Cygwin 基本包将不安装 GCC,因此,您必须修改默认设置。
将鼠标移动到Devel边的加号(+)上,然后点击它展开Devel类。
这一步,我们选择需要下载安装的组件包,为了使我们安装的Cygwin能够编译程序,我们需要安装gcc编译器,默认情况下,gcc并不会被安装,我们需要选中它来安装。为了安装gcc,我们用鼠标点开组件列表中的“Devel”分支,在该分支下,有很多组件,我们必须的是:
binutils
gcc
gcc-mingw
gdb
make
鼠标点击组件前面的循环按钮,会出现组建的版本日期,我们选择最新的版本安装,下图是选中后的四类组件的截图:
binutils组件
gcc组件
如果gcc-mingw-core和gcc-mingw-g++找不到:就找mingw-gcc-core和mingw-gcc-g++
gcc-mingw组件
gdb组件
make组件
选完以后,我们选择下一步,进入安装过程,如下图所示,
一直到下载完成,选择在桌面上建快捷方式,就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更多相关文章
- Android开发5――文件读写
- android 获取uri的正确文件路径的办法
- Linux开发环境搭建 三 (在Ubuntu上Android/Linux编译环境的准备)
- 在android studio的虚拟机的sd卡上创建文件夹
- Android 使用decodeFile方法加载手机磁盘中的图片文件
- Android AudioRecord录音实时pcm 编码为 aac 文件
- android之android studio的NDK环境搭建