如何查询当前手机的cpu架构,so库导入工程又出异常了?
执行adb命令:
adb shell
cat /proc/cpuinfo

对应文件夹
AArch64 == arm64-v8a
ARMv7 == armeabi-v7a
............等
其他你们自己发现吧。
注意:这里我要说明一个开发中要注意的问题.
首先说明下android studio中apk打包so文件的机制和机器自动选择so库文件执行的问题
1.apk打包会把工程中出现的armeabi等文件按照原来的文件名直接打包到apk中,如果多个module中有相同的文件夹,会把module中的so文件合并成到一个文件夹中来。
例如:
module中有so文件夹armeabi,armeabi-v7a,x86,x86_64,(记住armeabi中具体的几个so文件)
module中有so文件夹armeabi,armeabi-v7a,x86(记住armeabi中具体的几个so文件)
那么最后打包生成的apk文件中是这样的
很明显两个module中的相同文件夹下so文件合并了到一起了,那么说明apk最后会合并so文件。如果你的两个module中有一个有另一个没有的so文件夹及内容,apk依然会合并so文件夹,只是里面只有一个module中的so文件。例如上面图片中,第一个module中就有"x86_64"这个文件夹,而第二个module中就没有,但apk中会发现里面是有这个文件夹的,只是里面只有一个module中的so文件,这里就会引发一个问题,想知道就往下看。
2.打包完成后的apk文件安装到手机中,手机会根据自己cpu的架构选择对应的so文件夹执行so文件,目前的手机有多种cpu架构 ,如:armeabi,armeabi-v7a,arm64-v8a,x86,x86_64等,你会发现这个和我们上面android工程中的so文件夹名称是一致的,这也说明了手机会选择执行so文件夹中的文件。(注意:arm64架构的cpu,如果在apk中找到了arm64-v8a的文件夹,那么就会直接在里面找到要执行了so库文件,如果没有这个文件夹就会找armeabi文件下的so文件执行)
了解了上面了知识再来看下面:
1.如果你的android studio工程中使用了多个module,并且module中都加入了so库文件,例如这样:

那么你就要注意下,如果你的手机是arm64架构的那么按照上面的知识我们会知道,手机自动会去找arm64-v8a这个文件夹下的so文件,找不到该“文件夹”的话就去找armeabi文件夹下的so文件执行,那么按照上面的图,手机会找不到文件夹,最后选择找了armeabi文件夹,很好没有错。
但是,如果现在有个x86_64架构的手机那么按照之前的知识,手机一旦发现有x86_64这个文件夹就不会去找其他的文件夹,认定了这个文件夹中的so文件执行,那么你在操作app过程中点到或触发了需要用到第二个module中的so文件时,我们会发现这个文件夹中根本没有第二个module的so文件,那么很不幸这个会报错,报的是找不到so文件 "java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader couldn't find "(某个).so" 那么现在你应该懂了是什么原因,明明我有so文件会什么会提示找不到呢?这就是原因.
如果你理解到这儿了,也许有的同学很淡定的复制第二个module中的x86文件夹然后改个名字变成x86_64,以为这样就可以了,可以很明确的告诉你GG吧,这样会报一个错就是 “Java.lang.UnsatisfiedLinkError: 32bit can't 64bit” 也就是不能把32位文件转化为64位,虽然建文件夹是建对了,但so文件也不是乱用的。解决方案:去找找64位的so文件吧。
现在我希望大家能明白一点了,谢谢阅读,有错误请指正谢谢.
如何查询当前手机的cpu架构,so库导入工程又出异常了?的更多相关文章
- Xcode下开发c静态库for ios CPU架构 静态库合并
新建一个Cocoa Touch Static Library工程 1,先在工程左侧删除“工程名Tests”下的文件与文件夹(从内往外删,最后删除"工程名Tests文件夹") :D ...
- adb 查看 android手机的CPU架构
adb shell cat /proc/cpuinfo 当然要下载adb并配置好环境变量
- ANDROID开发中注意不同手机CPU架构对SO文件的不同需求。
如果没有对应于手机的SO文件,那么在调用第三方SDK时,会经常发生莫明其妙的错误.所以了解你调式或开发的目的手机CPU架构是很有必要的.
- 手机CPU架构体系分类及各大厂商
手机cpu相关知识,这对于开发Android应用程序适应各个机型有一定的辅助作用 . 手机cpu架构体系分类 指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分,代表架构分别是x86.A ...
- ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机
ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机 如果你所用的framework支持真机和模拟器多种CPU架构,而你需要的是其中的一种或几种,那么可以可以从framewo ...
- 让你分分钟读懂CPU架构及芯片厂商
CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分 不同类型CPU的重要标示.目前市面上的CPU指令集分类主要分有两大阵营,一个是intel.AMD为首的复杂指令集CPU ...
- 几种CPU架构
原文链接:http://blog.csdn.net/wyzxg/article/details/5027738 这几天在下载RPM包的时候,总会看见x86,x86-64,IA64,i386,i586等 ...
- Android app中的so库和CPU架构
一.android目前有几种cpu架构? 早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MI ...
- Android Studio指定引用jnilibs 特定CPU架构的so库文件
稍微大一些的项目都会用到第三方库,所以不可避免的会有针对不同手机cpu架构的.so库文件 'x86', 'x86_64', 'mips', 'mips64' 'armeabi' ,'armeabi- ...
随机推荐
- Word2010插入页码分节符
不是分页符,分节符主要是为了插入前后两种不同类型的页码,比如前面查罗马数字,从目录开始插入阿拉伯数字.
- linux之cat,more,less,head,tail
http://lionbule.iteye.com/blog/663549 1.cat # cat /etc/profile 注:查看/etc/目录下的profile文件内容: # cat -b /e ...
- 为小团队协作和个人任务管理而生的Team应用
今天主要给大家讲讲个人用户如何操作附个下载地址:https://coding.net/s/7a64f0d3-0fc3-4618-a490-d29651dae06b1.可直接在主页添加任务 任务被放在默 ...
- JS组件系列——显示隐藏密码切换的jQuery插件
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- scrapy-splash抓取动态数据例子十一
一.介绍 本例子用scrapy-splash抓取活动树网站给定关键字抓取活动信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 ...
- 怎样在caffe中添加layer以及caffe中triplet loss layer的实现
关于triplet loss的原理.目标函数和梯度推导在上一篇博客中已经讲过了.详细见:triplet loss原理以及梯度推导.这篇博文主要是讲caffe下实现triplet loss.编程菜鸟.假 ...
- Centos系统信息及日志
1.确认内核版本: #uname -r #uname -a 2.确认发行版本: #cat /etc/redhat-release 3.查看系统载入的模块: #lsmod | grep XXX 载入一个 ...
- 使用Google-Authenticator加强serverSSH登录
对于须要特殊加密的人群,我这里给出对应的方法来进行谷歌式加密. 过程例如以下: 准备: 首先在你的手机上准备好client(自己百度下载) 接下来依照命令做: date 查看系统时间 da ...
- Git——使用gitignore建立项目过滤规则
在进行协作开发代码管理的过程中,常常会遇到某些临时文件.配置文件.或者生成文件等,这些文件由于不同的开发端会不一样,如果使用git add . 将所有文件纳入git库中,那么会出现频繁的改动和push ...
- 【Oracle】查找每期数据都存在的产品
现在存在以下数据 如上图:A01与A02同时存在201710.201711.201712中 我们现在要将其查找出来 如果上图的表结构如下: 那么查询的SQL如下: SELECT DISTINCT CO ...
module中有so文件夹armeabi,armeabi-v7a,x86,x86_64,(记住armeabi中具体的几个so文件)
module中有so文件夹armeabi,armeabi-v7a,x86(记住armeabi中具体的几个so文件)

