您当前的位置: 首页 >  android studio
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Android studio加载so调用本地方法

沙漠一只雕得儿得儿 发布时间:2019-02-19 11:56:03 ,浏览量:0

先把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

 

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

1.2114s