關於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文件的疑問

場景:今天在編碼過程中遇到一個異常。

 1 replacements=[Ljava.lang.String;@420845d0
 2 HARDWARE=hws8301l
 3 matchers=[Ljava.lang.String;@42084550
 4 RADIO=unknown
 5 HOST=screen105
 6 HIDE_PRODUCT_INFO=false
 7 TAGS=release-keys
 8 PRODUCT_CHARM=MediaPad X1 7.0
 9 ID=HuaweiMediaPad
10 MIN_VERSION_LENGTH=8
11 MANUFACTURER=HUAWEI
12 TYPE=user
13 TAG=Build
14 TIME=1403853553000
15 FINGERPRINT=Huawei/MediaPad/hws8301l:4.2.2/HuaweiMediaPad/S8301uV1R1C233B009:user/release-keys
16 UNKNOWN=unknown
17 PRODUCT_8VOGUE=MediaPad M1 8.0
18 BOARD=BalongV9R1
19 VERSION_MAX_SIZE=30
20 properties={ro.build.internal.t.version=S8-301uV100R001C233B009-01, ro.build.cust.id=S8-301uV100R001C233B009, ro.build.operator.id=S8-301uV100R001C233B009}
21 PRODUCT=MediaPad
22 FilePath=/cust/hwver.properties
23 DISPLAY=S8-301uV100R001C233B009
24 USER=jslave
25 DEVICE=hws8301l
26 MODEL=MediaPad M1 8.0
27 BOOTLOADER=unknown
28 CPU_ABI=armeabi-v7a
29 PRODUCT_UNKNOWN=unknown
30 CPU_ABI2=armeabi
31 IS_DEBUGGABLE=false
32 SERIAL=A8Z6R14613000263
33 BRAND=Huawei
34 java.lang.NoClassDefFoundError: com/tong/t/utils/SecuritKeyUtil
35     at com.tong.t.act.LoadingAct.init(LoadingAct.java:162)
36     at com.tong.t.act.LoadingAct.handleOtherMessage(LoadingAct.java:537)
37     at com.tong.framework.bufferknife.FinalActivity$MHandler.handleMessage(FinalActivity.java:307)
38     at android.os.Handler.dispatchMessage(Handler.java:99)
39     at android.os.Looper.loop(Looper.java:137)
40     at android.app.ActivityThread.main(ActivityThread.java:5119)
41     at java.lang.reflect.Method.invokeNative(Native Method)
42     at java.lang.reflect.Method.invoke(Method.java:511)
43     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:834)
44     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
45     at dalvik.system.NativeStart.main(Native Method)
46 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.tong.t.utils.SecuritUtil" on path: /data/app/com.tong.t-2.apk
47     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
48     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
49     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
50     ... 11 more
51 java.lang.ClassNotFoundException: Didn't find class "com.tong.t.utils.SecuritUtil" on path: /data/app/com.tong.t-2.apk
52     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
53     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
54     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
55     at com.tong.t.act.LoadingAct.init(LoadingAct.java:162)
56     at com.tong.t.act.LoadingAct.handleOtherMessage(LoadingAct.java:537)
57     at com.tong.framework.bufferknife.FinalActivity$MHandler.handleMessage(FinalActivity.java:307)
58     at android.os.Handler.dispatchMessage(Handler.java:99)
59     at android.os.Looper.loop(Looper.java:137)
60     at android.app.ActivityThread.main(ActivityThread.java:5119)
61     at java.lang.reflect.Method.invokeNative(Native Method)
62     at java.lang.reflect.Method.invoke(Method.java:511)
63     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:834)
64     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
65     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文件語法規范說明及舉例

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM