配置环境
1下载NDK配置
2 配置javaH工具
file--->setting-tools 配置如下参数
$JDKPath$\bin\javah.exe
-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$
-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$
3编写java 类 在java等级目录下创建jni目录
public class JniDemo { public static native String getString(); }
4右击Moude jni目录下回生成com_example_java_ndk_JniDemo.h文件
5复制com_example_java_ndk_JniDemo.h文件后缀改成.cpp
编写Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := com_example_java_ndk_G.cpp//你的cpp文件
LOCAL_MODULE := xldemo//生成so文件名
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_PLATFORM := android-16 APP_ABI :=arm64-v8a armeabi-v7a
修改
JNIEXPORT jstring JNICALL Java_com_example_java_1ndk_JniDemo_getString
(JNIEnv *env, jclass)
{
return (*env).NewStringUTF("Hello cpp");
}
;
6 把目录cd 到 jni目录下 执行ndk-build命令 生成libs文件和.so文件 截切到libs目录中 在build文件中配置
defaultConfig {
applicationId "com.example.java_ndk"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
//moduleName "JniLib"
abiFilters "armeabi-v7a" //输出指定abi下的so库
}
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir "src/main/libs"
}
}
测试
public class Main3Activity extends AppCompatActivity {
static {
System.loadLibrary("JniDemo");生成的文件去掉lib 只写 JniDemo
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
ButterKnife.bind(this);
Toast.makeText(this, "--"+JniDemo.getString(), Toast.LENGTH_SHORT).show();