现在的位置: 首页 > 综合 > 正文

Android ndk开发入门

2013年08月22日 ⁄ 综合 ⁄ 共 2736字 ⁄ 字号 评论关闭
在ubuntu下搭建了Android NDK开发环境,网络资料很多,不过还是自己作下记录。
NDK简介

NDK,全称为Native Development Kit,NDK是一系列工具的集合。

* NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。

* NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。”

下载及安装

下载地址,http://dl.google.com/android/ndk/android-ndk-r7b-linux-x86.tar.bz2

然后执行以下操作

gavin@gavin-desktop:~$ tar -xvf android-ndk-r7b-linux-x86.tar.bz2 -C ~/
gavin@gavin-desktop:~$ sudo vi /etc/profile

在文件最后加上下面两行

NDK_HOME=$HOME/android-ndk-r7b/
export PATH=$PATH:$NDK_HOME


输入ndk-build命令验证是否成功

gavin@gavin-desktop:~$ ndk-build 
Android NDK: Could not find application project directory ! 
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it. 
/home/gavin/android-ndk-r7b/build/core/build-local.mk:130: *** Android NDK: Aborting 。 停止。

也可以编译一下官方提供的示例程序测试一下

gavin@gavin-desktop:~$ cd android-ndk-r7b/samples/hello-jni/
gavin@gavin-desktop:~/android-ndk-r7b/samples/hello-jni$ ndk-build 
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile thumb : hello-jni <= hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => libs/armeabi/libhello-jni.so
gavin@gavin-desktop:~/android-ndk-r7b/samples/hello-jni$ ls libs/armeabi/
gdbserver gdb.setup libhello-jni.so

Hello NDK

在eclipse中新建一个android的activity工程,名为HelloNDK, 在界面中放置一个TextView, ID设置为myText。java代码文件HelloNDKActivity.java内容如下:

package com.gavin.example;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloNDKActivity extends Activity {
private TextView mTextView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView) findViewById(R.id.myText);
mTextView.setText(sayHello());   //这里调用本地代码函数,获取一个字符串
}
public native String sayHello();  //本地代码函数

static {
System.loadLibrary("helloNDK");  //导入共享库helloNDK
}

}

下一步就是要生成c语言的共享库helloNDK。在工程目录下新建目录jni,使用javah命令生成导入函数接口文件

gavin@gavin-desktop:~/workspace/HelloNDK$ javah -classpath bin/classes com.gavin.example.HelloNDKActivity

将生成的头文件com_gavin_example_HelloNDKActivity.h,copy到jni目录下。

在jni目录下新建一个文件com_gavin_example_HelloNDKActivity.c,实现头文件中声明的函数,内容如下:

#include <string.h>
#include <jni.h>

#include <string.h>
#include <jni.h>
jstring Java_com_gavin_example_HelloNDKActivity_sayHello( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello NDK");
}

在jni目录新建文件Android.mk,内容如下:

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

现在回到eclipse,把ndk-build集成到eclipse中,Properties ->Builders-> New, 配置如下:

Working Directory目录意义不太清楚,保存退出后刷新一下工程,编译后,启动模拟器

抱歉!评论已关闭.