一、架构

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. Excel ——多表关联查询-vlookup

    一.分组 需求: 在B列的右侧添加一列[消费分组]对B列的[月分组水平]进行分组,原始数据如下: 公式:在 C2 输入:“=VLOOKUP(B2,$E$1:$G$4,2,1)”,下拉填充. 提示:VL ...

  2. weka的基本使用

    目录: 1. 简介 2.界面初识 3.数据格式 4.数据准备 5.关联规则 6.分类与回归 7.聚类分析 8.Weka相关资料 9.Weka二次开发 10.Weka源代码导入 1. 简介 WEKA的全 ...

  3. 2018年中国研究生数学建模竞赛C题 二等奖 赛题论文

    2018年中国研究生数学建模竞赛C题 对恐怖袭击事件记录数据的量化分析 恐怖袭击是指极端分子或组织人为制造的.针对但不仅限于平民及民用设施的.不符合国际道义的攻击行为,它不仅具有极大的杀伤性与破坏力, ...

  4. Codeforces 998D. Roman Digits 【打表找规律】

    <题目链接> 题目大意: 现在有无限个 1,5,10,50这四个数字,从中恰好挑选n个数字,问你这些数字的和总共有多少种不同的情况. 解题分析: 由于此题 n 的范围特别大,达到了1e9, ...

  5. ServiceNow在中国还有没有模仿者?

    美国版的“ServiceNow”:https://www.servicenow.com 中国版的“ServiceHot” :http://www.itsmcn.com

  6. GCD 与 LCM UVA - 11388

    题目链接: https://cn.vjudge.net/problem/23709/origin 本题其实有坑 数据大小太大, 2的32次方,故而一定是取巧的算法,暴力不可能过的 思路是最大公因数的倍 ...

  7. Java并发编程(十三)-- 线程池

    什么是线程池? 线程池就是以一个或多个线程循环执行多个应用逻辑的线程集合. 为什么用线程池? 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时 ...

  8. Java并发编程(九)-- 进程饥饿和公平锁

    上一章已经提到“如果一个进程被多次回滚,迟迟不能占用必需的系统资源,可能会导致进程饥饿”,本文我们详细的介绍一下“饥饿”和“公平”. Java中导致饥饿的原因 在Java中,下面三个常见的原因会导致线 ...

  9. 1084: 开心的小明(dengdengoj)

    题目描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行”.今 ...

  10. C++程序设计方法5:接口设计实例

    //例子:旋转方阵填充,要求矩阵大小任意,尺寸在运行时输入 设计思路:从上到下 int main() { cout << "Please input N:"; int ...