Eclipse进行NDK开发的基本流程是:
创建Android工程--->完成java函数的编写,添加jni的接口函数(native函数)的添加--->添加jni文件夹,添加Android.mk文件和源文件--->在源文件中实现接口函数--->用ndk-build把源文件编译成lib库--->启动Android模拟器,安装运行工程。
举例:
1、打开Eclipse,添加一个android工程。工程的名称为IDETTest,然后根据提示完成Activity名称(IDETest)和java包(com.test.IDETest)的填写。注意java包的名称中最好不要有下划线,可能在以后的jni调用中调用失败,因为jni的接口函数的格式是Java_java包的名称_Activity名称_声明的函数
2、完成java代码的编写,在需要进行jni调用的类中引入ndk交叉编译的调用:
static {
System.loadLibrary("IDETest");
}
同时在类中声明native函数(在C文件中被创建,用NDK交叉编译)
public native String generateID(String label);
完整的java文件如下所示:
package com.test.IDETest;
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
public class IDETest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
TextView tv=new TextView(this);
tv.setText(generateID("47766"));
setContentView(tv);
}
/*native method implement*/
public native String generateID(String label);
/*******************************/
/*import c lib*/
static {
System.loadLibrary("IDETest");
}
}
3、在IDETest工程中添加文件夹,名称为jni。在jni文件夹下添加c模块的实现文件(.c和.h的文件工程)和Android.mk文件
c模块的文件(IDETest.c)的内容
#include <string.h>
#include <jni.h>
#include <stdio.h>
jstring
Java_com_test_IDETest_IDETest_generateID( JNIEnv* env,
jobject thiz,
jstring label)
{
char *str=(char *)malloc(1024*sizeof(char));
sprintf(str,"Hello everybody! I am from XXX, and my ID is %s",(*env)->GetStringUTFChars(env,label,0));
printf("%s",str);
return (*env)->NewStringUTF(env,str);
}
Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := IDETest
LOCAL_SRC_FILES := IDETest.c
include $(BUILD_SHARED_LIBRARY)
4、编译源代码为库文件。
进入工程目录
root@XXX-laptop:~/IDETest# ls
AndroidManifest.xml bin gen libs proguard.cfg src
assets default.properties jni obj res
root@XXX-laptop:~/IDETest# ndk-build
Compile thumb : IDETest <= IDETest.c
SharedLibrary : libIDETest.so
Install : libIDETest.so => libs/armeabi/libIDETest.so
完成编译后会自动创建obj和libs文件夹
编译好的库文件就在这里面。
5、启动Android模拟器运行工程。