zoukankan      html  css  js  c++  java
  • Android一些日常的错误

    一、加载.so出现的一些问题

      1. so文件 放进了优先级低的ABI目录

      问题:如果你的项目中,有其他优先级更好的ABI目录,但是你把ABI文件方法放到了优先级低的目录,最后导致你的ABI文件无法被加载

           案例:某手机CPU架构是ARMv7,ABI文件是armeabi-v7a,但是放进了armeabi目录中

      结果:项目中有armeabi-v7a的目录,armeabi目录的文件,无法被加载,然后运行报错,出现类似于如下log信息。    

         Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/.xx../base.apk"],nativeLibraryDirectories=[/data/app/.xx../lib/arm, /vendor/lib, /system/lib]]] couldn't find "lib..xx...so"
      
      解决办法:建议armeabi-v7a的目录下的文件和armeabi目录的文件保持一致
     
      2. 两个第三方SDK中的ABI文件优先级不一样
      问题:两个第三方的SDK中ABI文件优先级不一样,手机加载运行时,会导致优先级低的库,无法被加载。
      例子:某手机CPU架构是ARMv7,项目中使用了两个第三方SDK:假设是"支付宝"和"银联".

         支付宝:ABI文件是armeabi-v7a,所以放到armeabi-v7a目录中。

         银联:ABI文件是armeabi,所以放到armeabi目录中。

      结果:在运行时,会发现运行后crash,出现如下日志:

         Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/.xx../base.apk"],nativeLibraryDirectories=[/data/app/.xx../lib/arm, /vendor/lib, /system/lib]]] couldn't find "lib..xx...so"  

        解决方案1:使用同一优先级的ABI文件,ABI文件放入到优先级相同的ABI目录

            支付宝:ABI文件是armeabi-v7a,放到armeabi-v7a目录中。

            银联:ABI文件是armeabi-v7a,放到armeabi-v7a目录中。

            支付宝:ABI文件是armeabi,放到armeabi目录中。

            银联:ABI文件是armeabi,放到armeabi目录中。

      解决方案2:如果两个第三方提供的是不同优先级的ABI文件,则将ABI文件放入到优先级相同的ABI(优先级低的目录下)。

            支付宝:ABI文件是armeabi-v7a,放到armeabi目录中。

            银联:ABI文件是armeabi,放到armeabi目录中。

            

       




  • 相关阅读:
    java中的各种Queue
    关闭线程的一些问题
    Exchanger
    文件锁FileLock
    StringBuffer和String需要注意的
    maven出现:Failed to execute goal on project ...: Could not resolve dependencies for project ...
    pringboot pom文件引入本地jar包和对其打jar包
    SpringBoot热部署的两种方式
    idea 自动导入包和自动将没用的包去除
    springCould:使用Feign 实现声明式服务调用
  • 原文地址:https://www.cnblogs.com/liunx1109/p/10340654.html
Copyright © 2011-2022 走看看