UnsatisfiedLinkError: No implementation found for , AndroidStudio使用*.so

1 篇文章 0 订阅
1 篇文章 0 订阅

今天工作的时候,发现了一个jni的问题,java.lang.UnsatisfiedLinkError: No implementation found for......




问题1:后来查了资料后发现,是由于我在java中定义了native方法,但是在jni中没有对应的方法,这样的话java就无法链接到本地方法。




原因:

    造成这种Error的有两种情况:
    (1) 没有在本地方法中的头文件中定义方法;
    (2) 缺少so文件。


解决方案:

    (1)在.h文件中第一方法,并在.c中实现方法;
    (2)引入so文件;




方案实行分析:

    方案1:这个不用多说,定义方法,自己根据自己的需求去实现;


    方案2:
    步骤(这里只讲解在Android Studio下的解决方案):

        (1)在  项目名\app\src\main下新建jniLibs文件夹,并将对应的.so文件放进去{文件夹结构为:处理器版本/***.so(如:armeabi/***.so)},

    

           这样Android Studio就可以在编译的时候加载对用的so文件了;
        (2)注意:重点来了,
           在Android Studio下如果你只有部分平台下的.so文件,而且你不在gradle中做任何配置的话,

           那么智能的Android Studio就会在编译的时候编译出其他平台下的.so文件(我在Eclipse中测试的时候没有发现这个问题)

           看好了,我现在只在jniLibs中放入了armeabi版本的*.so文件,但是在apk中却出现了'x86_64','x86','mips64'等多个版本的*.so文件,

   这样就会造成程序无法运行【如图】

           

          
           解决方案:

           在.gradle指定对应平台的(代码如下),这样就可以在编译的时候让studio只生成对应平台的*.so文件【如图】

           

splits {
        abi {
            enable true
            reset()
            include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for
            universalApk true //generate an additional APK that contains all the ABIs
        }
    }

Android的.so文件教程参考地址:关于Android的.so文件你所需要知道的

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值