如何查询当前手机的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文件吧。

现在我希望大家能明白一点了,谢谢阅读,有错误请指正谢谢.

原文地址:https://www.cnblogs.com/woaixingxing/p/8352119.html

时间: 2024-10-01 07:28:25

如何查询当前手机的cpu架构,so库导入工程又出异常了?的相关文章

android多cpu架构适配开篇

简介:做项目的时候经常会使用到so文件.例如使用高德地图,其SDK中就包含了armeabi.armeabi-v7a.arm64-v8a.x86等其他文件夹,里面通常放着同样名称.同样数量的so文件.实际使用过程中,关于这些so文件引发的问题确实不少,也不好解决.写下此文,希望以后遇到相关的问题,能有个大概的思路. 名词解析: NDK:Native Development Kit JNI:Java Native Interface ABI: Application Binary Interface

手机服务器微架构设计和实现专题

9.29 开始动手看着慕课网的视频去学习手机服务器微架构实现,原因是: 现在自己想要认真地学习了解android的基本网络知识,以及其实践 一.知识准备 首先,我要了解tcp.udp和http的关系,了解自己需要在什么情况下选择哪个. 然后,就是我需要了解的是http的实现原理. 据说这个是我们面试时有可能需要考到的,其实,我需要的是弄清楚 request和accept需要做的是什么 最后,是关于http的解析过程. 二.写代码过程 接下来,就是跟着视频写代码 : 首先是设定accept soc

ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机

ios  framework 分离与合并多种CPU架构,分离与合并模拟器与真机 如果你所用的framework支持真机和模拟器多种CPU架构,而你需要的是其中的一种或几种,那么可以可以从framework中分离出各种架构,然后合并你需要的,具体的方式举例如下: 首先从framework中分离出armv7 arm64,或者还有armv7s lipo XXXX.framework/XXXX -thin arm64 -output XXXX.framework/XXXX-arm64 lipo XXXX

Android Studio指定引用jnilibs 特定CPU架构的so库文件

稍微大一些的项目都会用到第三方库,所以不可避免的会有针对不同手机cpu架构的.so库文件 'x86', 'x86_64', 'mips', 'mips64'  'armeabi' ,'armeabi-v7a',  'arm64-v8a' 但是不是所有的第三方库都会适配所有的cpu架构,本人亲测采用一种降低性能却减少库文件的方式 就是只用armeabi-v7a库:有armeabi-v7a就把其他的都删掉,没有armeabi-v7a,把armeabi的文件移到armeabi-v7a中,把其他的都删除

查询安卓手机的内部信息,几串代码即可实现

要想查询你安卓手机的内部信息,几串代码即可实现,记住这些代码,可以帮你很多忙哦~ *#*#4636#*#*显示手机信息.电池信息.电池记录.使用统计数据.WiFi 信息 *#*#7780#*#*重设为原厂设定,不会删除预设程序,及 SD 卡档案. *2767*3855#重设为原厂设定,会删除 SD 卡所有档案. *#*#34971539#*#* 显示相机相机韧体版本,或更新相机韧体 *#*#7594#*#*当长按关机按钮时,会出现一个切换手机模式的窗口,包括: 静音模式.飞航模式及关机,你可以用

微信公众平台开发(35)(天气预报、股票查询、手机归属查询、在线听音乐、翻译、成绩查询功能)代码分享

微信公众平台开发应用(天气预报.股票查询.手机归属查询.在线听音乐.翻译.成绩查询功能) 原文: http://www.cnblogs.com/imaker/p/5491433.html 1.xml(信息返回用扩展语言XML来传递值) $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ $postObj = simplexml_load_string($postStr

CUDA学习之从CPU架构说起

最近要学习GPU编程,就去英伟达官网下载CUDA, 遇到的第一个问题就是架构的选择 所以我学习的CUDA的第一步是从学习认识CPU架构开始的,x86-64简称x64,是64位版的x86指令集,向前兼容与16位版和32位版的x86架构.x64最初是由AMD于1999年设计完成,AMD首次公开64位集以扩充给x86,称为“AMD64”.后来也被Intel所采用,又被intel 叫做“Intel 64”. 那么ppc64le又指什么呢,下面引用wiki上的两段话“ ppc64 是Linux和GCC开源

手机通话清单查询,手机短信记录查询,移动手机短信内容查询,客户详细资料查询

免责声明:咨 询 Q Q: 2540400410 主要有这方面的一切问题你就直接加这个QQ:2540400410就帮助你了.成功案例等信息在此强烈推荐,他们专业查微信聊天记录,QQ聊天记录,恢复删除的微信聊天记录,查别人的qq聊天记录等.服务QQ: 2540400410.我找过他们,他们有信誉.也许可以帮你,我查我男朋友的聊天记录就是找他们的.~他们的QQ: 2540400410-很专业,信誉很好!希望可以帮助你们.加QQ:2540400410 专业为你服务:手机通话记录查询,手机通话详单查询,

常见的CPU架构

CPU架构从大的层面分两类--CISC.RISC. x86 CISC就是复杂指令集计算机,目前专指 x86 和 x86-64 两类 其中 x86 又叫 IA32,即 Intel Architecture 32(Intel32位架构),不管是Intel生产的 x86 CPU,还是AMD或者VIA生产的,都是 IA32,IA32 并非没有专利保护而是 AMD 和 VIA/Cyrix 通过交叉专利授权获得了 IA32 的使用权. x86-64 又叫 AMD64,它的 Intel 版本叫做 EM64T(