Android Studio NDK cpp读取so库文件

做了一个demo,在此记录下:

1.首先需要Android Studio新建NDK C++工程;

 

2.修改地方:

build.gradle

android {
    //省略部分代码
        externalNativeBuild {
            cmake {
                cppFlags ""
                abiFilters "x86_64"
                arguments '-DANDROID_PLATFORM=android-29',
                        "-DANDROID_STL=c++_shared"
            }
        }
    }
    //省略部分,以下为添加,为了加载lib文件夹内so库
    sourceSets {
        main{
            jniLibs.srcDirs=['libs']
        }
    }
}

java相关接口:

public native int testFromJNI(int t1,int t2);

cpp接口:

#include <jni.h>
#include <dlfcn.h>

extern "C" JNIEXPORT jint JNICALL
Java_com_example_myapplication0707_MainActivity_testFromJNI(
        JNIEnv *env,
        jobject /* this */, jint t1, jint t2) {

    int a = 0;
    void *handle = dlopen("libTest0706.so", RTLD_LAZY);
    if (handle != NULL) {
        typedef int (*add_t)(int a, int b);
        add_t add = (add_t) dlsym(handle, "add");
        if(add != NULL){
            a = add(t1,t2);
        }
    }
    return a;
}

 

libTest0706.so

libTest0706.so库内test0706.cpp,这里so库架构需要跟Android Studio内部指定生成的架构一致,api-level一致,而且需要利用NDK交叉工具链编译生成,否则会发生冲突或者undefined reference(可用Android Studio直接生成,或者CMake+Ninja+引入NDK工具链)

extern "C"{

int add(int a, int b) {  
    return a + b;  
}  

}

然后把so库放入libs/"架构" 文件夹下,这里看自身对应的架构

 

这样运行便可以调用add函数了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值