关于Android开发中Arm、X86和Mips(草稿)
一、架構(gòu)
1.Arm架構(gòu)
是一個32位精簡指令集(RISC)處理器架構(gòu),其廣泛地使用在許多嵌入式系統(tǒng)設(shè)計(jì)。
2.X86架構(gòu)
是一個intel通用計(jì)算機(jī)系列的標(biāo)準(zhǔn)編號縮寫,也標(biāo)識一套通用的計(jì)算機(jī)指令集合。
3.Mips架構(gòu)
是一種采取精簡指令集(RISC)的處理器架構(gòu)。
二、三者區(qū)別
X86架構(gòu)是X86指令集,它屬于CISC指令集。ARM架構(gòu)是ARM指令集,屬于RISC指令集。
X86是馮若依曼結(jié)構(gòu),ARM是哈弗結(jié)構(gòu),這個不一定,比如ARM7TDMI用的就是馮若依曼結(jié)構(gòu)。
其實(shí)都是差不多,X86指令多,應(yīng)用范圍廣,但效率就顯得低一點(diǎn),ARM指令少,應(yīng)用范圍小,效率顯得高。
MIPS架構(gòu)的處理器多用在網(wǎng)關(guān)、貓、機(jī)頂盒什么的。ARM處理器用在便攜設(shè)備,智能手機(jī)。
X86,依靠強(qiáng)有力的工廠,前后端聯(lián)合調(diào)優(yōu),用tick-tock的穩(wěn)定,強(qiáng)悍路標(biāo),強(qiáng)勢控制產(chǎn)業(yè)鏈,獲取價值鏈上最豐厚的那部分利潤。
ARM, 靠IP授權(quán)的商業(yè)模式,且技術(shù)上走與Intel差異化路線,加上一些些運(yùn)氣(踏對了手機(jī)這條路,謝謝TI-Nokia,Apple,Samsung for big.Little)走小而美的路線,但是憑借已經(jīng)形成巨大的生態(tài)系統(tǒng),占據(jù)優(yōu)勢。
MIPS,本有機(jī)會很帥,但是對指令集控制松散,導(dǎo)致生態(tài)系統(tǒng)分裂,沒有形成合力,最終被市場拋棄。
Power,沒有形成規(guī)模效益,也沒有進(jìn)入良性循環(huán)周期,我的預(yù)測是Power8會是最后一顆芯片,就這樣結(jié)束。
三、android中如何編譯出64位so文件
如果是在Linux下編譯Android源碼,有可能是兩個原因:
1. lunch命令有32位和64位的區(qū)別,注意選能夠編譯64位so的命令
2. mk文件中有LOCAL_MODULE_PATH的值比如為$(TARGET_OUT_SHARED_LIBRARIES)/hw的改為LOCAL_MODULE_RELATIVE_PATH := hw,后一種可以分別在lib和lib64下分別生成32位和64位的so文件,這個看看編譯后的信息就知道了.
四、關(guān)于如何在生成各種架構(gòu)的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文件夾內(nèi)有so文件。
https://www.zhihu.com/question/20148756
android64位機(jī)子兼容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] 關(guān)于Android的.so文件你所需要知道的
Android Studio開發(fā)JNI工程
?armeabi和armeabi-v7a(轉(zhuǎn))
微信的安裝包在只編譯了armeabi,沒有x86,arm64-v8a是如何運(yùn)行在各種處理器的手機(jī)上的?
Android ndk-build ignoring APP_ABI := x86
NDK Programmer's Guide
NDK Application.mk使用手冊
Android.mk和Application.mk文件語法規(guī)范說明及舉例
?
轉(zhuǎn)載于:https://www.cnblogs.com/royi123/p/5301077.html
總結(jié)
以上是生活随笔為你收集整理的关于Android开发中Arm、X86和Mips(草稿)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL算法algorithm,
- 下一篇: HTML表单详解