关于Android开发中Arm、X86和Mips(草稿)
一、架构
1.Arm架构
是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。
2.X86架构
是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。
3.Mips架构
是一种采取精简指令集(RISC)的处理器架构。
二、三者区别
X86架构是X86指令集,它属于CISC指令集。ARM架构是ARM指令集,属于RISC指令集。
X86是冯若依曼结构,ARM是哈弗结构,这个不一定,比如ARM7TDMI用的就是冯若依曼结构。
其实都是差不多,X86指令多,应用范围广,但效率就显得低一点,ARM指令少,应用范围小,效率显得高。
MIPS架构的处理器多用在网关、猫、机顶盒什么的。ARM处理器用在便携设备,智能手机。
X86,依靠强有力的工厂,前后端联合调优,用tick-tock的稳定,强悍路标,强势控制产业链,获取价值链上最丰厚的那部分利润。
ARM, 靠IP授权的商业模式,且技术上走与Intel差异化路线,加上一些些运气(踏对了手机这条路,谢谢TI-Nokia,Apple,Samsung for big.Little)走小而美的路线,但是凭借已经形成巨大的生态系统,占据优势。
MIPS,本有机会很帅,但是对指令集控制松散,导致生态系统分裂,没有形成合力,最终被市场抛弃。
Power,没有形成规模效益,也没有进入良性循环周期,我的预测是Power8会是最后一颗芯片,就这样结束。
三、android中如何编译出64位so文件
如果是在Linux下编译Android源码,有可能是两个原因:
1. lunch命令有32位和64位的区别,注意选能够编译64位so的命令
2. mk文件中有LOCAL_MODULE_PATH的值比如为$(TARGET_OUT_SHARED_LIBRARIES)/hw的改为LOCAL_MODULE_RELATIVE_PATH := hw,后一种可以分别在lib和lib64下分别生成32位和64位的so文件,这个看看编译后的信息就知道了.
四、关于如何在生成各种架构的so文件的疑问
场景:今天在编码过程中遇到一个异常。
replacements=[Ljava.lang.String;@420845d0
HARDWARE=hws8301l
matchers=[Ljava.lang.String;@
RADIO=unknown
HOST=screen105
HIDE_PRODUCT_INFO=false
TAGS=release-keys
PRODUCT_CHARM=MediaPad X1 7.0
ID=HuaweiMediaPad
MIN_VERSION_LENGTH=
MANUFACTURER=HUAWEI
TYPE=user
TAG=Build
TIME=
FINGERPRINT=Huawei/MediaPad/hws8301l:4.2./HuaweiMediaPad/S8301uV1R1C233B009:user/release-keys
UNKNOWN=unknown
PRODUCT_8VOGUE=MediaPad M1 8.0
BOARD=BalongV9R1
VERSION_MAX_SIZE=
properties={ro.build.internal.t.version=S8-301uV100R001C233B009-, ro.build.cust.id=S8-301uV100R001C233B009, ro.build.operator.id=S8-301uV100R001C233B009}
PRODUCT=MediaPad
FilePath=/cust/hwver.properties
DISPLAY=S8-301uV100R001C233B009
USER=jslave
DEVICE=hws8301l
MODEL=MediaPad M1 8.0
BOOTLOADER=unknown
CPU_ABI=armeabi-v7a
PRODUCT_UNKNOWN=unknown
CPU_ABI2=armeabi
IS_DEBUGGABLE=false
SERIAL=A8Z6R14613000263
BRAND=Huawei
java.lang.NoClassDefFoundError: com/tong/t/utils/SecuritKeyUtil
at com.tong.t.act.LoadingAct.init(LoadingAct.java:)
at com.tong.t.act.LoadingAct.handleOtherMessage(LoadingAct.java:)
at com.tong.framework.bufferknife.FinalActivity$MHandler.handleMessage(FinalActivity.java:)
at android.os.Handler.dispatchMessage(Handler.java:)
at android.os.Looper.loop(Looper.java:)
at android.app.ActivityThread.main(ActivityThread.java:)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.tong.t.utils.SecuritUtil" on path: /data/app/com.tong.t-2.apk
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:)
at java.lang.ClassLoader.loadClass(ClassLoader.java:)
at java.lang.ClassLoader.loadClass(ClassLoader.java:)
... more
java.lang.ClassNotFoundException: Didn't find class "com.tong.t.utils.SecuritUtil" on path: /data/app/com.tong.t-2.apk
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:)
at java.lang.ClassLoader.loadClass(ClassLoader.java:)
at java.lang.ClassLoader.loadClass(ClassLoader.java:)
at com.tong.t.act.LoadingAct.init(LoadingAct.java:)
at com.tong.t.act.LoadingAct.handleOtherMessage(LoadingAct.java:)
at com.tong.framework.bufferknife.FinalActivity$MHandler.handleMessage(FinalActivity.java:)
at android.os.Handler.dispatchMessage(Handler.java:)
at android.os.Looper.loop(Looper.java:)
at android.app.ActivityThread.main(ActivityThread.java:)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:)
at dalvik.system.NativeStart.main(Native Method)
在添加jniLibs/arm64-v8a
jniLibs/armeabi-v7a
jniLibs/x86
jniLibs/mips64
jniLibs/x86_64
jniLibs/mips
后,加载so文件就报错。只有jniLibs/armeabi文件夹内有so文件。
https://www.zhihu.com/question/20148756
SQLcipher (different versions) works on one platform , but crash on other platform
http://gegaosong.iteye.com/blog/1745937
SQLCipher 3.3.1-2 aar does not create .so files for x64 architecture
2016-03-29
[Android] 关于Android的.so文件你所需要知道的
微信的安装包在只编译了armeabi,没有x86,arm64-v8a是如何运行在各种处理器的手机上的?
Android ndk-build ignoring APP_ABI := x86
Android.mk和Application.mk文件语法规范说明及举例
关于Android开发中Arm、X86和Mips(草稿)的更多相关文章
- 如何在Android开发中让你的代码更有效率
最近看了Google IO 2012年的一个视频,名字叫做Doing More With Less: Being a Good Android Citizen,主要是讲如何用少少的几句代码来改善And ...
- Android开发中的问题及相应解决(持续更新)
最近博客写的少了,以后还得经常更新才行. ------------------------------------------------------------ 1.特定业务需求下try cath ...
- 【转】android开发中关于模拟器emulation的常见问题
[转]android开发中关于模拟器emulation的常见问题 Trouble: 无法启动android模拟器,提示 XDM authorization key matches an existin ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- android开发中fragment获取context
在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- Android开发中的输入合法性检验
Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...
- 在android开发中使用multdex的方法-IT蓝豹为你整理
Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...
- 怎样实现了捕获应用中的日志在android开发中
怎样实现了捕获应用中的日志在android开发中,大家可研究一下. Process mLogcatProc = null; BufferedReader reader = null; try { mL ...
随机推荐
- P1433 吃奶酪 回溯法 优化
题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...
- Why Did the Cow Cross the Road III HYSBZ - 4991 -CDQ-逆序数
HYSBZ - 4991 题意: 第一列 1-n的排列 ,第二列 1-n的排列. 相同数字连边 ,问 有多少组 数字 是有交点的并且 绝对值之差>K思路:处理一下 1-n 在第一列的位置, ...
- Alpha(9/10)
鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...
- 实现左边div固定宽度,右边div自适应撑满剩下的宽度的布局方式:
html: <div class="container"> <div class="left"> left固定宽度200px </ ...
- java之XML
//转为XML格式 public static String ArrayToXml(Map<String, String> arr) { String xml = "<xm ...
- json信息的后台到前台的传输
公共方法: /** * 实际返回的是 response.setContentType("text/html;charset=utf-8"); * * @param o */ pub ...
- [Web]flask-excel实现excel文件下载的前后端实现
之前同事写了前端表格导出的功能, 前后端逻辑没有梳理, 导致后端代码十分臃肿. 接手之后, 重新选择了前端table插件, 从jqxGrid变更为bootstrapTable. 本来想依赖集成的tab ...
- [vscode] pylint在虚拟环境下错误告警问题
在左下角点击python, 选择对应的虚拟环境即可.
- 2017-9-8-Linux下VNC server开启&图形界面显示
之前有一个写树莓派3B怎么只使用网线VNC远程的blog,里面写的比较粗糙(其实是很长时间没搞我也忘了怎么装的了,照着原来的看一遍应该能想起来),所以重新来在新的环境下搭建一下VNC server. ...
- 理解Session缓存
session的缓存有两大作用 (1)减少访问数据库的频率.应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,音系Session的缓存 可以提高数据库访问性能 (2)保证缓存中 ...