zoukankan      html  css  js  c++  java
  • UnsatisfiedLinkError: No implementation found for , AndroidStudio使用*.so

    今天工作的时候。发现了一个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)在  项目名appsrcmain下新建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文件你所须要知道的

  • 相关阅读:
    c语言 作用域、存储期、链接属性汇总
    进程上下文切换分析
    进程装载过程分析(execve系统调用分析)
    fork 创建进程的过程分析
    系统调用软中断处理程序system_call分析
    linux 系统调用分析
    8分钟带你深入浅出搞懂Nginx
    控制反转
    JAVA泛型(转)
    AOP(转)
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7131161.html
Copyright © 2011-2022 走看看