美文网首页
Android JNI之加载第三方so库

Android JNI之加载第三方so库

作者: 海内灬存知己 | 来源:发表于2022-11-13 18:23 被阅读0次

JNI全称是Java Native Interface,为Java本地接口,是连接Java层与Native层的桥梁。
是连接Java和c的一种语言。

1:cpp文件

路径:src/main/jni
find_name.cpp
cpp文件就需要jni语言来编写,它的作用是调用第三方so的.h文件,从而实现调用第三方的so库。
我这里就先不调用.h文件了,简单返回一下就好了。

#include <jni.h>
#include <string.h>

extern "C"
jstring Java_com_example_aiosceneengine_util_JniUtil_test(JNIEnv* env, jclass thiz) {
    return env->NewStringUTF("不支持(请关注官方群或本软件中软件更新链接)");
}

Java_com_example_aiosceneengine_util_JniUtil_test是一种固定的写法。
其中Java:Java去调用
com_example_aiosceneengine:java项目的包名
JniUtil:调用这个JNI类的类名,
test:对应方法的名字了

2. 导入Android.mk文件

这个路径也是src/main/jni

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
 
# 指定so库文件的名称
LOCAL_MODULE    := jni_mix
# 指定需要编译的源文件列表
LOCAL_SRC_FILES := find_name.cpp
# 指定C++的编译标志
LOCAL_CPPFLAGS += -fexceptions
# 指定要加载的静态库
#LOCAL_WHOLE_STATIC_LIBRARIES += android_support
# 指定需要链接的库
LOCAL_LDLIBS    := -llog
 
include $(BUILD_SHARED_LIBRARY)
$(call import-module, android/support)

3.配置build.gradle

android -> defaultConfig 下添加

 ndk {
            // 设置支持的SO库架构,第三方给的so库哪几种架构,就配置这几种架构
            abiFilters 'arm64-v8a'
        }

android 下添加

  externalNativeBuild {
        ndkBuild {
            path file('src/main/jni/Android.mk')
        }
    }
    packagingOptions{
        pickFirst 'lib/arm64-v8a/libjni_mix.so'
    }

sourceSets 下添加

  sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs = ['src/main/jniLibs']
        }
4.编译项目

路径在: build → intermediates → ndkBuild → debug → obj → local下

5.将生成的so拷入src/main/jniLibs中
图片.png
6.调用C代码
package com.example.aiosceneengine.util;

import android.util.Log;

public class JniUtil {
    //native表示是加载的jni方法
    public static native String test();

    static {
        //一定要记得加载so
        System.loadLibrary("jni_mix");
    }

    public static void myTest() {
        new Thread(() -> {
            String str = test();
            Log.v("TAG", "HAHA:" + str);
        }).start();
    }
}
7.成功调用
图片.png
8.调用第三方so库

待更新......

相关文章

网友评论

      本文标题:Android JNI之加载第三方so库

      本文链接:https://www.haomeiwen.com/subject/oedlxdtx.html