博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】.so兼容32位和64位
阅读量:6088 次
发布时间:2019-06-20

本文共 1252 字,大约阅读时间需要 4 分钟。

本文转自:http://blog.csdn.net/fwt336/article/details/51700300

安卓的兼容性是一个很令人头疼的问题,这几天又遇到了,还好还是解决了。

我遇到的问题是,我在网上下载了一个功能库,里面带了一个xxx.so动态库,问题它是32位的。但是,早两天拿了一台arm-64位的手机进行测试时,发现它居然崩溃了!泪崩了好久...

 

起初报错信息是:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.xxx.xxx-1/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "xxx.so",
主要是说找不到这个64位的xxx.so库,好吧,我确实没有建arm64-v8a文件夹,更别说是里面还要放一个64位的xxx.so库了。

算了,还是建一个arm64-v8a文件夹,把xxx.so库拷贝进去。然后,然后还是崩溃了。。。

 

报错信息是:

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.xxx.xxx-2/lib/arm64/xxx.so" is 32-bit instead of 64-bit
at java.lang.Runtime.loadLibrary(Runtime.java:371)
at java.lang.System.loadLibrary(System.java:988)
果然这么直接暴力是不行的,xxx.so是个该死的32位的库,问题是当初我找到这个库的时候,就只有这么一个库,我去哪找个64位的来呀?我都没有c++的源文件!
然后只能百度啊,谷歌了。。。爬了会帖子发现,最多的是然你配置NDK编译条件,Android.mk LOCAL_MULTILIB := 32,哎,悲伤了好久。。。
不过,幸运的我还是找到了解决的办法:
1.在build.gradle中配置如下:
android {
    ...
defaultConfig {
....
ndk {
moduleName"native"
abiFilters"armeabi","armeabi-v7a","x86","mips"
}
    }
    ...
}

2.在gradle.properties中配置Android.useDeprecatedNdk=true。(android的A是小写a的,CSDN会自动修改)开始迷糊了半天,项目中怎么没有这个文件呢?为啥别人的项目中都有,看了下同事的项目,一样的没有。然后查了下,原来是用来配置变量参数的,好吧,那就新建一个吧。

 

然后就搞定啦!

 

你可能感兴趣的文章
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>