一、架构

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

android64位机子兼容32位.so库文件

SQLcipher (different versions) works on one platform , but crash on other platform

http://stackoverflow.com/questions/32154487/java-lang-unsatisfiedlinkerror-couldnt-find-libstlport-shared-so

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文件你所需要知道的

Android Studio开发JNI工程

armeabi和armeabi-v7a(转)

微信的安装包在只编译了armeabi,没有x86,arm64-v8a是如何运行在各种处理器的手机上的?

Android ndk-build ignoring APP_ABI := x86

NDK Programmer's Guide

NDK Application.mk使用手册

Android.mk和Application.mk文件语法规范说明及举例

关于Android开发中Arm、X86和Mips(草稿)的更多相关文章

  1. 如何在Android开发中让你的代码更有效率

    最近看了Google IO 2012年的一个视频,名字叫做Doing More With Less: Being a Good Android Citizen,主要是讲如何用少少的几句代码来改善And ...

  2. Android开发中的问题及相应解决(持续更新)

    最近博客写的少了,以后还得经常更新才行. ------------------------------------------------------------ 1.特定业务需求下try cath ...

  3. 【转】android开发中关于模拟器emulation的常见问题

    [转]android开发中关于模拟器emulation的常见问题 Trouble: 无法启动android模拟器,提示 XDM authorization key matches an existin ...

  4. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  5. android开发中fragment获取context

    在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...

  6. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  7. Android开发中的输入合法性检验

    Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...

  8. 在android开发中使用multdex的方法-IT蓝豹为你整理

    Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...

  9. 怎样实现了捕获应用中的日志在android开发中

    怎样实现了捕获应用中的日志在android开发中,大家可研究一下. Process mLogcatProc = null; BufferedReader reader = null; try { mL ...

随机推荐

  1. Java大数统计-hdu1316

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1316 题目描述: 给你一个范围,问你在这个范围内有多少斐波拉契数. 代码实现: import java ...

  2. POJ 2481 Cows 【树状数组】

    <题目链接> 题目大意: 就是给出N个区间,问这个区间是多少个区间的真子集. 解题分析: 本题与stars类似,只要巧妙的将线段的起点和终点分别看成 二维坐标系中的x,y坐标,就会发现,其 ...

  3. 牛客练习赛28B (经典)【线段树】

    <题目链接> qn姐姐最好了~     qn姐姐给你了一个长度为n的序列还有m次操作让你玩,     1 l r 询问区间[l,r]内的元素和     2 l r 询问区间[l,r]内的元 ...

  4. Apache系列:Apache的全局配置

    配置文件组成: 整个配置文件由3段组成: (1)全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性: (2)主服务器:主站属性: (3)虚拟主机:虚拟主机及属性定义 注:第二段和第三段 ...

  5. 20个命令行工具监控 Linux 系统性能【转载】

    对于每个系统管理员或网络管理员来说,每天要监控和调试 Linux 系统性能问题都是非常困难的工作.我已经有5年 Linux 管理员的工作经历,知道如何监控系统使其保持正常运行.为此,我们编写了对于 L ...

  6. Codeforces.1110E.Magic Stones(思路 差分)

    题目链接 听dalao说很nb,做做看(然而不小心知道题解了). \(Description\) 给定长为\(n\)的序列\(A_i\)和\(B_i\).你可以进行任意多次操作,每次操作任选一个\(i ...

  7. CF871D Paths

    link 题意: n个点的无向图,若$\gcd(x,y) \neq1​$则$(x,y)​$有边,统计$1\sim n​$构成的无向图两两点对最短路是之和是多少(两点不连通最短路记为0)?$n\leq ...

  8. python基础一 ------如何统计一个列表元素的频度

    如何统计一个列表元素的频度 两个需求: 1,统计一个随机序列[1,2,3,4,5,6...]中的出现次数前三的元素及其次数 2,统计一片英文文章中出现次数前10 的单词 两种方法: 1,普通的for循 ...

  9. [PA2014]Fiolki

    [PA2014]Fiolki 题目大意: 有\(n(n\le2\times10^5)\)种不同的液体物质和\(n\)个容量无限的药瓶.初始时,第\(i\)个瓶内装着\(g_i\)克第\(i\)种液体. ...

  10. BZOJ4970 : [ioi2004]empodia 障碍段

    通过两遍单调栈求出每个点作为最小值往右延伸到$g[i]$,作为最大值往左延伸到$f[i]$. 那么一个区间$[i,j]$可行当且仅当$g[i]\geq j$.$f[j]\leq i$且$i-a[i]= ...