0%

Android-Studio-Ndk-So-文件

一 下载NKD,并解压
官网:https://developer.android.com/index.html
二 新建项目
1 新建Android Studio项目
2 项目配置NDK路径
image.png
3 gradle.properties 增加

1
2
//使用NDK
android.useDeprecatedNdk=true

3 项目的build.gradle defaultConfig增加

1
2
3
4
ndk {
moduleName "native-jni" // 生成的so动态库名称
abiFilters "armeabi", "armeabi-v7a", "x86" // 输出指定三种abi体系结构下的so库
}

三 写相关代码
1 新建jni目录
2 新建jni调用类

1
2
3
4
5
6
7
8
public class JNIUtils {
// 加载native-jni
static {
System.loadLibrary("native-jni");
}
//java调C中的方法都需要用native声明且方法名必须和c的方法名一样
public native String stringFromJNI();
}

3 打开底部Terminal 进入到 ../src/main/java路径下 生成 .h文件

1
javah -d jni com.example.bxlt.myapplication.JNIUtils

成功后生成对应文件
image.png

  1. jni路径下新建c文件,保持名字一致
    image.png
    内容如下
    1
    2
    3
    4
    5
    6
    #include "com_example_bxlt_myapplication_JNIUtils.h"

    JNIEXPORT jstring JNICALL Java_com_example_bxlt_myapplication_JNIUtils_stringFromJNI
    (JNIEnv *env, jobject obj){
    return (*env)->NewStringUTF(env,"这里是C++代码");
    }
    C的内容说明:这三个地方名字一致
    image.png

5 Android 调用

1
2
TextView tv = findViewById(R.id.tv);
tv.setText(new JNIUtils().stringFromJNI());

image.png

6 SO文件
image.png