beginning android ndk
linux: ubuntu 10
1. 下载ndk包, 解开后,设置 export NDK=/software/... (/etc/profile)
2. 给eclipe加上C/C++语法支持, help->instll new software,
href: Galileo -
清空 type filter text,才能显示出要选择的东西.
选 programming language : c/c++ development tool
下载后,重启eclipse
3. 新建Android project,在activity里写上如下native方法:
private native String invokeNativeFunction();
private native String bar();
(源码在最后)
4. 在项目目录下,新建一个文件夹jni,在里面新建一个ndkfoo.c文件和一个ndkbar.c文件
其中com_ex_NdkFooActivity是包名加类名.这是JNI的命名规则.invokeNativeFunction是函数名
//ndkfoo.c
#include
#include
jstring Java_com_ex_NdkFooActivity_invokeNativeFunction(JNIEnv * env,jobject javaThis){
return (*env)->NewStringUTF(env,"Hello from native code! -> ");
}
//ndkbar.c
#include
#include
jstring Java_com_ex_NdkFooActivity_bar(JNIEnv * env,jobject javaThis){
return (*env)->NewStringUTF(env,"bar");
}
5. 新建一个Android.mk(也是在jni里)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ndkfoo
LOCAL_SRC_FILES := ndkfoo.c ndkbar.c
include $(BUILD_SHARED_LIBRARY)
这里的my-dir,BUILD_SHARED_LIBRARY由ndk-build提供.
6. 编译两个.c文件生成.so文件
进入NdkDemo的根目录(就是src,jni等所在的目录)
/NdkDemo$ ndk-build
Compile thumb : ndkfoo <= /NdkDemo/jni/ndkfoo.c
Compile thumb : ndkfoo <= /NdkDemo/jni/ndkbar.c
SharedLibrary : libndkfoo.so
Install : libndkfoo.so => /NdkDemo/libs/armeabi
7. 运行模拟器里运行NdkDemo
如图:
8. NdkFooActivity.java
package com.ex;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
public class NdkFooActivity extends Activity {
// load the library - name matches jni/Android.mk
static {
System.loadLibrary("ndkfoo");
}
// declare the native code function - must match ndkfoo.c
private native String invokeNativeFunction();
private native String bar();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// this is where we call the native code
String hello = invokeNativeFunction();
String bar = bar();
new AlertDialog.Builder(this).setMessage(hello+" "+bar).show();
}
}
补充: 在eclipse里使用ndk
前提:
1. 会用Android SDK建立 Android application.
2. 会安装和使用NDK.
3. 在eclipse里安装了CDT插件(CDT - C/C++ Development Tools)
配置过程:
1. 新建Android application.
2. 在工程的根目录下建jni目录
3. 在Project Explorer里右键,New->Convert to a c/c+ project.
在对话框里把 Specify Project Type打上勾, 在左边的框里选Makefile project,
在右边的框里选 --Other toolchain--, 然后Finish
4. 设置工程属性,选C/C++ build->Environment.
在对话框里Add: PATH -> ndk的路径,如:/software/android-ndk-r4b
把Add to all configurations打上勾,然后OK.
然后也确定Append variables to native environment打上勾.然后Apply.
5. 在工程的根目录建Makefile文件:
all:
ndk-build # (前面是tab,不是空格,这很重要)
clean:
ndk-build clean
6. 在jni里建Android.mk文件, oh,yeah! 可以干活了。
阅读(951) | 评论(0) | 转发(0) |