解决javac、javah不是内部命令
在用户变量中添加C:\Program Files\Java\jdk1.7.0_80
在系统变量的PATH中添加C:\Program Files\Java\jdk1.7.0_80\bin
NDK配置
第一步在SDKManager中下载NDK
第二步在local.properties中添加
ndk.dir=D\:\\AndroidSDK\\ndk-bundle
第三步在gradle.properties中添加
android.useDeprecatedNdk=true
在build.gradle(app)中添加
defaultConfig { applicationId "com.example.jnitest" minSdkVersion 16 targetSdkVersion 30 versionCode 1 versionName "1.0" ndk{ abiFilters "armeabi", "armeabi-v7a", "x86" } testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } sourceSets { main { jniLibs.srcDir 'libs' } }
JNI简单实例
第一步写类
static { System.loadLibrary("Hello"); //Android.mk文件中的LOCAL_MODULE } public native static String getStrFromJNI();
第二步在main文件下创建jni目录里面存放
1.Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := Hello //lib模块名 LOCAL_SRC_FILES := Hello.c //加载的c文件 include $(BUILD_SHARED_LIBRARY)
2.Application.mk
APP_ABI:= armeabi-v7a x86 arm64-v8a x86_64 APP_PLATFORM:= android-22
3.Hello.c
#include<studio.h> #include<jni.h> jstring Java_com_example_jnitest_JNITest_getStrFromJNI(JNIEnv* env,jobject jobj){ char* text="I am from c"; return (*env)->NewStringUTF(env,text); }
第三步
进入到java文件中 执行javah -jni com.example.jnitest.JNITest生成.h头文件
第四步执行ndk-build生成.so文件
第五步复制.so文件到libs目录下