1.Arm架構html
是一個32位精簡指令集(RISC)處理器架構,其普遍地使用在許多嵌入式系統設計。java
2.X86架構android
是一個intel通用計算機系列的標準編號縮寫,也標識一套通用的計算機指令集合。sql
3.Mips架構後端
是一種採起精簡指令集(RISC)的處理器架構。微信
X86架構是X86指令集,它屬於CISC指令集。ARM架構是ARM指令集,屬於RISC指令集。
X86是馮若依曼結構,ARM是哈弗結構,這個不必定,好比ARM7TDMI用的就是馮若依曼結構。
其實都是差很少,X86指令多,應用範圍廣,但效率就顯得低一點,ARM指令少,應用範圍小,效率顯得高。架構
MIPS架構的處理器多用在網關、貓、機頂盒什麼的。ARM處理器用在便攜設備,智能手機。app
X86,依靠強有力的工廠,先後端聯合調優,用tick-tock的穩定,強悍路標,強勢控制產業鏈,獲取價值鏈上最豐厚的那部分利潤。
ARM, 靠IP受權的商業模式,且技術上走與Intel差別化路線,加上一些些運氣(踏對了手機這條路,謝謝TI-Nokia,Apple,Samsung for big.Little)走小而美的路線,可是憑藉已經造成巨大的生態系統,佔據優點。
MIPS,本有機會很帥,可是對指令集控制鬆散,致使生態系統分裂,沒有造成協力,最終被市場拋棄。
Power,沒有造成規模效益,也沒有進入良性循環週期,個人預測是Power8會是最後一顆芯片,就這樣結束。ide
若是是在Linux下編譯Android源碼,有多是兩個緣由:oop
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文件,這個看看編譯後的信息就知道了.
場景:今天在編碼過程當中遇到一個異常。
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
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文件語法規範說明及舉例
個人公衆號: