JNI 传统方法实现Hell World

1 创建新项目

2 下载ndk 

 

3 创建class NDKTools

public class NDKTools { public static native String getStringFromNDK(); }

JNI 传统方法实现Hell World

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);
    }
}

JNI 传统方法实现Hell World

5 获取class文件(点击bulid按钮 生成 .class文件)

JNI 传统方法实现Hell World

6 (获取.h文件)

在bulid 文件夹下面找到classes\debug 执行 javah -jni com.example.jnitest.JNITools 命令 获取com_example_jnitest_NDKTools.h文件,把获取的文件放到jni 文件夹下

* 注意 javah 命令在java11以上好像已经取消了,执行可能无效,所以推荐使用Java8 

JNI 传统方法实现Hell World

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的第一行代码");
  }

JNI 传统方法实现Hell World

8 添加并编写Android.mk文件 内容如下

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := jnitest-jni
LOCAL_SRC_FILES := jnitest.c
include $(BUILD_SHARED_LIBRARY)

JNI 传统方法实现Hell World

9修改相应的配置文件

添加NDK路径(在local.properties 添加ndk路径)

ndk.dir=C\:\\Users\\mayn\\AppData\\Local\\Android\\Sdk\\ndk\\21.3.6528147(这里填写你是用的ndk路径)

JNI 传统方法实现Hell World

修改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']

}

JNI 传统方法实现Hell World

gradle.properties中添加 Android.useDeprecatedNdk=true

JNI 传统方法实现Hell World

10,运行即可看到 hello world