1. 在MainActivity里面创建native函数,利用javah生成头文件。
切换到Terminal页面,默认进入Project路径下,通过cd jnidemo(your module)进入module路径,利用javah生成jni头文件,命令如下:
javah -d jni -classpath E:\NDK\jnidemo\src\main\java -jni com.android.jnidemo.MainActivity
-d 在路径下创建jni目录
-classpath 指定含有native函数的java文件路径
-jni 指定包含native函数的完整类名
2. 根据生成的h文件编写source文件,本例设置文件名为TestJNI.h TestJNI.cpp
JNIEXPORT jstring JNICALL Java_com_android_jnidemo_MainActivity_getStringFromC
(JNIEnv *, jobject);JNIEXPORT jstring JNICALL Java_com_android_jnidemo_MainActivity_getStringFromC
(JNIEnv *env, jobject thiz){
return env->NewStringUTF("Hello JNI !");
}
3. 编写jni配置文件
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=TestJNI
LOCAL_SRC_FILES := TestJNI.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := x86
APP_OPIM :=debug
注:APP_ABI设置为x86则只会生成x86平台下的so文件,设置为all则生成所有平台的so文件。
4. 利用ndk-build生成so文件(在此之前需要在设置系统环境变量,在Path栏增加ndk-build所在路径)。
注:在对C++文件修改之后需要再次ndk-build。
5. 对工程进行ndk使用配置
1)在gradle.properties中设置android.useDeprecatedNdk=true.
2)在biuld.gradle的android子节点中添加
sourceSets{
main{
jniLibs.srcDirs=['libs']
}
}
使工程可以识别jni生成的so文件。
6. 调用native函数
textView= (TextView) findViewById(R.id.textView);
textView.setText(getStringFromC());
本回答被提问者采纳