Android studio加载so调用本地方法

先把so文件放到APP的libs目录下:

编辑app下的build.gradle文件:

在build.gradle下添加,和defaultConfig、buildTypes同级:

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

 在dependencies中添加:

implementation fileTree(include: ['*.jar'], dir: 'libs')

添加后如图:

so库调用:

加载so库代码:

    static {
        loadNativeLibrary();
    }

    private static synchronized void loadNativeLibrary() {
        System.loadLibrary("encrypt");
    }

调用的so内的方法前需要添加native关键字:

 private static native byte[] e(byte[] input);

需要注意的点:一、包名要和so库中的包名一样;二、类名也要一致。
我们看看so库的头文件中的函数:

JNIEXPORT jint JNICALL Java_cn_scnu_MainActivity_num
  (JNIEnv *, jobject);

函数名为Java_包名类名函数名。所以我们创建的Android工程的包名也要一致,即cn_scnu,同时,负责加载并且提供native方法的类的类名也要相同,即MainActivity,否则调用不成功,提示找不到方法。

过程中遇到两个错误:

1.is 32-bit instead of 64-bit动态库错误

2.UnsatisfiedLinkError

有价值的解决方式:

https://segmentfault.com/a/1190000006210166

https://blog.csdn.net/xiaxiayige/article/details/68925669

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值