JNI 传统方法实现Hell World
1 创建新项目
2 下载ndk
3 创建class NDKTools
public class NDKTools { public static native String getStringFromNDK(); }
4 MainActivity调用NDKTools getStringFromNDK()
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String text = NDKTools.getStringFromNDK(); Log.i("gebilaolitou","text="+text); ((TextView)findViewById(R.id.tv)).setText(text); } }
5 获取class文件(点击bulid按钮 生成 .class文件)
6 (获取.h文件)
在bulid 文件夹下面找到classes\debug 执行 javah -jni com.example.jnitest.JNITools 命令 获取com_example_jnitest_NDKTools.h文件,把获取的文件放到jni 文件夹下
* 注意 javah 命令在java11以上好像已经取消了,执行可能无效,所以推荐使用Java8
7 编写jnitest.c文件
#include "com_example_jnitest_NDKTools.h" JNIEXPORT jstring JNICALL Java_com_example_jnitest_NDKTools_getStringFromNDK (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"Hellow World,NDK的第一行代码"); }
8 添加并编写Android.mk文件 内容如下
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := jnitest-jni LOCAL_SRC_FILES := jnitest.c include $(BUILD_SHARED_LIBRARY)
9修改相应的配置文件
添加NDK路径(在local.properties 添加ndk路径)
ndk.dir=C\:\\Users\\mayn\\AppData\\Local\\Android\\Sdk\\ndk\\21.3.6528147(这里填写你是用的ndk路径)
修改app module目录下的build.gradle中的内容
ndk{
moduleName "ndkdemotest-jni"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDirs = ['src/main/jniLibs']
}
gradle.properties中添加 Android.useDeprecatedNdk=true
10,运行即可看到 hello world