1. 创建Android Project
File -> New -> Android Application Project
2. 定义调用C函数的java类,并生成(Eclipse中是自动编译的)。
Java代码:
package lw.example.hellondk;
public class HelloJni {
public native String getStringFromJni();
public static native String getStringFromJniStatic();
static {
System.loadLibrary("HelloNdk");
}
}
3. 生成h文件
在Project新建gen_h.bat文件,输入内容如下:
javah -classpath binclasses -d jni lw.example.hellondk.HelloJni
@pause
运行该bat文件后,会在jni目录生成lw_example_hellondk_HelloJni.h文件。
4. 添加Native支持
右击Project -> Android Tools -> Add Native Support...
5. 附加Android Native C的h文件
右击project -> Properties,设置如下:
6. 在cpp文件中实现函数。
#include "lw_example_hellondk_HelloJni.h"
jstring
Java_lw_example_hellondk_HelloJni_getStringFromJni(JNIEnv* env, jobject thiz)
{
return env->NewStringUTF("Hello JNI!");
}
jstring
Java_lw_example_hellondk_HelloJni_getStringFromJniStatic(JNIEnv* env, jclass thiz)
{
return env->NewStringUTF("Hello JNI!(static)");
}
7. 编译so文件
点击工具栏,编译成功后,会生成so文件。
8. 在Activity中添加测试代码。
package lw.example.hellondk;
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Create a TextView and set its content.
* the text is retrieved by calling a native
* function.
*/
TextView tv = new TextView(this);
tv.setText( HelloJni.getStringFromJniStatic() );
setContentView(tv);
}
}
9. 运行查看结果