① 為什麼android的APK打包的時候要帶上armv7或者x86的so庫
因為,你在寫程序的時候,其中的一些函數,使用了這些庫中的文件,所以要帶上才能正常使用
② Android中的armeabi、armeabi-v7a、arm64-v8a及x86的詳解
一. lib和libs
放在lib中的是被reference的,放在libs中的是被include的。
放在libs中的文件會自動被編輯器所include。所以不要把API放到libs里去。
lib的內容是不會被打包到APK中,libs中的內容是會被打包進APK中
二. .so庫
NDK編譯出來的動態鏈接庫。
一些重要的加密演算法或者核心協議一般都用c寫然後給java調用。這樣可以避免反編譯後查看到應用的源碼。
三. .so庫該如何存放
放置 .so 文件的正確姿勢其實就兩句話:
• 為了減小 apk 體積,只保留 armeabi 和 armeabi-v7a 兩個文件夾,並保證這兩個文件夾中 .so 數量一致
• 對只提供 armeabi 版本的第三方 .so,原樣復制一份到 armeabi-v7a 文件夾
存放so的規則:
你應該盡可能的提供專為每個ABI優化過的.so文件,但要麼全部支持,要麼都不支持:你不應該混合著使用。你應該為每個ABI目錄提供對應的.so文件。
四. libs下armeabi等的作用是什麼
存放.so庫,主要針對不同的設備兼容,也可以說是專門針對不同Android手機下CPU架構的兼容。
Android 設備的CPU類型(通常稱為」ABIs」)
早期的Android系統幾乎只支持ARMv5的CPU架構,後面發展到支持七種不同的CPU架構:ARMv5,ARMv7 (從2010年起),x86 (從2011年起),MIPS (從2012年起),ARMv8,MIPS64和x86_64 (從2014年起),每一種都關聯著一個相應的ABI。
應用程序二進制介面(Application Binary Interface)定義了二進制文件(尤其是.so文件)如何運行在相應的系統平台上,從使用的指令集,內存對齊到可用的系統函數庫。在Android 系統上,每一個CPU架構對應一個ABI:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。
armeabi-v7a: 第7代及以上的 ARM 處理器。2011年以後生產的大部分Android設備都使用它.
arm64-v8a: 第8代、64位ARM處理器,很少設備,三星 Galaxy S6是其中之一。
armeabi: 第5代、第6代的ARM處理器,早期的手機用的比較多。
x86: 平板、模擬器用得比較多。
x86_64: 64位的平板。
如果項目只包含了 armeabi,那麼在所有Android設備都可以運行;
如果項目只包含了 armeabi-v7a,除armeabi架構的設備外都可以運行;
如果項目只包含了 x86,那麼armeabi架構和armeabi-v7a的Android設備是無法運行的; 如果同時包含了 armeabi, armeabi-v7a和x86,所有設備都可以運行,程序在運行的時候去載入不同平台對應的so,這是較為完美的一種解決方案,同時也會導致包變大。
最後,如果我們只想支持armeabi-v7a,那麼需要在gradle中配置
因為默認情況下,打包後會自動生成armeabi 到 x86的所有文件夾。這就有可能導致一些x86的設備因為在x86文件夾下找不到so文件而崩潰。
③ 蘋果的A7CPU 和安卓的ARMv7是一樣的嗎
蘋果的A7CPU 和安卓的ARMv7是不一樣的。蘋果的A7CPU是自主研發的64位架構CPU,而安卓的是架構。只是一種生產工藝或技術。
架構,又名軟體架構,是有關軟體整體結構與組件的抽象描述,用於指導大型軟體系統各個方面的設計。架構描述語言(ADL)用於描述軟體的體系架構。現在已有多種架構描述語言,如Wright(由卡內基梅隆大學開發),Acme(由卡內基梅隆大學開發),C2(由UCI開發),Darwin(由倫敦帝國學院開發)。ADL的基本構成包括組件、連接器和配置。
④ Android APK 32位和64位 的區別
32位 對應的就是32位的操作系統,那麼 64位 就是對應64位的操作系統。
armeabi: armv5架構和armv6架構(32位)
armeabi-v7a:armv7架構(32位)
armeabi-v8a:armv8架構(64位)
x86:x86架構(32位)
x86_64:x86_64架構(64位)
要確定應用是否包含 64位 庫,最簡單的方法就是檢查APK文件的結構。在編譯時,APK會與應用所需的所有原生庫打包在一起。原生庫會根據 ABI 而存儲在不同的文件夾中。應用無需支持所有的64位架構,但對於支持的每種原生 32位架構,則應用都必須包含相應的 64位 架構
第一步:在AndroidStudio中檢測APK
查看 lib 目錄下是否有支持64位架構的 .so 文件。如果沒有支持 32位 或者 64位 的就在 build.gradle — defaultConfig 中配置一下添加所需要的庫,重新打包。
感覺有用的同學,動動小手指給個贊,碼字不易。
⑤ 手機型號MI-ONE Plus 版本Android2.3.6 cpu型號:ARMv7 processor rev 10 (v71) cpu核心數:單核
的Exynos 4212 Cortex-A9ARM的
32 nm1.5 GHz雙核心雙核ARM的Mali-400 MP4 _at_ 400MHzExynos 441232nm1.4 GHz四核心四核心ARM的Mali-400 Cortex-A9ARM的MP4 @ MP4 @ 400MHz的
應該是沒有問題的,這
4412四核
procts4quad。「目標=」_blank「> http://www.samsung.com/global/business/semiconctor/minisite/Exynos/procts4quad.html
⑥ qt輸出安卓程序設置
1.新建一個普通Widgets的工程
?2.選擇Desktep Qt5.9.3 MinGW 32bit編譯器和Android for armeabi-v7a (GCC 4.9, Qt 5.9.3 for Android armv7)編譯器
?3.然後選擇默認的就行
?4.在mainwindow.ui界面上,放入兩個按鈕,分別命名為發布和訂閱
?5.選擇MinGW 32bit的debug編譯模式,構建和運行
?6.選擇Android的debug模式重新構建,構建完後,在工程同目錄下,生產一個build-AndroidTest3-Android_for_armeabi_v7a_GCC_4_9_Qt_5_9_3_for_Android_armv7-Debug文件夾,在該生產的文件的android-buildin目錄下,會生成該項目的APK
?7.點擊運行按鈕,在彈出框中選擇AVDVertualDevice安卓模擬器,如果沒有則點擊【Creat Android Virtual Device】按鈕新建一個。
?8.點擊【ok】按鈕後,等待安卓虛擬機啟動一段時間,會彈出如下界面:(注意:要等安卓虛擬機完全開機完後,才會自動運行剛才的apk程序,第一次啟動可能需要4-5分鍾左右,如果需要持續調試,可以不用關閉該安卓虛擬機)
?9.如果剛才生產的apk沒有自動啟動的話,可以把剛才生產的apk丟進安卓虛擬機中進行測試
⑦ android開發libs下的armeabi、armeabi-v7a、arm64-v8a等及導入so所踩過的坑
項目中需要使用第三方的sdk,集成完成後在小米4設備上能夠正常運行,但在三星S6上面運行的時候crash,日誌如下:
Android 設備的CPU類型(通常稱為」ABIs」)
早期的Android系統幾乎只支持ARMv5的CPU架構,現在可以支持七種不同的CPU架構:ARMv5,ARMv7 (從2010年起),x86 (從2011年起),MIPS (從2012年起),ARMv8,MIPS64和x86_64 (從2014年起),每一種都關聯著一個相應的ABI。 應用程序二進制介面定義了二進制文件(尤其是.so文件)如何運行在相應的系統平台上,從使用的指令集,內存對齊到可用的系統函數庫。在Android 系統上,每一個CPU架構對應一個ABI:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。
各版本分析如下:
mips / mips64: 極少用於手機可以忽略
x86 / x86_64: x86 架構的手機都會包含由 Intel 提供的稱為 Houdini 的指令集動態轉碼工具,實現 對 arm .so 的兼容,再考慮 x86 1% 以下的市場佔有率,x86 相關的兩個 .so 也是可以忽略的
armeabi: ARM v5 這是相當老舊的一個版本,缺少對浮點數計算的硬體支持,在需要大量計算時有性能瓶頸
armeabi-v7a: ARM v7 目前主流版本
arm64-v8a: 64位支持
所謂的ARMv8架構,就是在MIPS64架構上增加了ARMv7架構中已經擁有的的TrustZone技術、虛擬化技術及NEON advanced SIMD技術等特性,研發成的。
PS:在2011年11月,ARM公司發布了新一代處理器64位架構ARMv8的部分技術細節(也就是我們常說的Cortex-A57A53),代表著未來移動處理器邁入64位行列。我們得明確一點,ARM公司自己本身並沒有64位晶元設計技術,他是通過了收購MIPS64處理器架構的部分技術使用權,再結合ARM的一些特性設計出來的。也就是說:MIPS、ARM、X86三大架構中,唯一沒有64位技術的ARM,通過收購MIPS的形式得到了64位。
介紹參考資源如下:
http://www.jianshu.com/p/34ee91ae5547
寶劍鋒從磨礪出,梅花香自苦寒來
⑧ 【Android開發學Flutter】Xcode編譯問題匯總
Xcode編譯經常遇到各種問題,處理起來費時費力,挺打擊學習積極性的。記錄下這些問題,方便自己也幫助後來人。
編譯的時候遇到:
網上有很多解決方法,我是用這個方法解決的:
編譯的時候遇到:
解決辦法:
Project -> User-Defined -> FLUTTER_ROOT 改成本地 flutter SDK路徑
感謝 issues 上的小哥,給你個🚀
在項目目錄下執行 flutter run 可以正常運行到手機,但是在Xcode build 還是有問題。
這時需要手動添加 FLUTTER_ROOT 到 User-Defined :
添加之後:
就可以正常在Xcode build 安裝到手機了。
flutter build ios 後出現:
pod install 後出現:
解決辦法:
這是因為terminal沒有走代理的流量,
使用 git config --global http.proxy "localhost:port" ,設置代理。
port是埠號,根據不同的vpn不一樣,我的埠是10080。
執行 git config --global http.proxy "localhost:10080"
Xcode build 的時候出現:
解決辦法:打開 ios/Podflie 文件:
關於 bitcode 的問題,我檢查了下用到的第三方SDK,應該是網路地圖的問題,我引入了個第三方插件(吐槽下沒官方插件),網路地圖有支持和不支持 bitcode 的兩個SDK,我取消這個插件就沒有報這個錯了,奇怪的是,再次引入同一個插件,也可以正常打包,所以說這個問題還沒有完全解決。
大家可以試下這個處理方法:
TARGETS -> Build Seettings 搜 arm ,試一下把其他刪除,只留下armv7跟armv7s或者只留下armv7
解決辦法:
https://www.jianshu.com/p/201df7e9a52f
我是clean Xcode之後就可以了
解決辦法:
用的是P12證書,改成手動簽名:
⑨ cpu型號ARMv7 運行內存814mb安卓系統2.3.4能否升級到安卓4.0
親,您好,,天語小黃蜂(型號:天語w619)是一款由中國天語集團(K-Touch)於2012年4月25日聯手阿里巴巴和中國聯通發布的一款Android智能手機,定位入門級市場。該機初始搭載了阿里巴巴最新的阿里雲2012操作系統(後發布了原生Android2.3.7),並且使用了512MB的雙內存和800Mhz高通7225A(ARMv7)處理器,售價僅為599元左右,是當前599元價位以內Android手機中最具性價比的手機。 聯想A750是聯想(Lenovo)於2012年3月推出的一款Android智能手機。該機採用了一塊4英寸(800*480解析度)的電容屏,一顆頻率為1Ghz的MT6575處理器,內置加強過的PowerVR SGX531 Pro圖像處理晶元、512MB的RAM以及4G的ROM,擁有2000毫安的大容量電池,搭載Android2.3系統,未來還能升級為4.0系統,並且支持雙卡雙待。該機擁有前置30萬攝像頭以及後置500萬攝像頭,整體性能是目前所有千元安卓智能機中最強大的。上市僅僅10天便達到50萬台的銷售量,是當前千元價位以內Android手機中極具性價比的手機之一。 有人會問,為什麼我介紹手機給別人至介紹一款,我認為既然這是最好的,性價比最高的,那為什麼還要誤導親們呢,為什麼要把不如他的介紹給親呢,我的解答就如同我們團隊的宗旨,專業為您。
⑩ 說說Android項目中的armeabi,armeabi-v7a和x86
這三者都表示的是CPU類型,早期的Android系統幾乎只支持ARMv5的CPU架構,但是現在已經有7種了。ARMv5,ARMv7 (從2010年起),x86 (從2011年起),MIPS (從2012年起),ARMv8,MIPS64和x86_64 (從2014年起),每一種都關聯著一個相應的ABI(應用程序二進制介面(ApplicationBinary Interface)定義了二進制文件(尤其是.so文件)如何運行在相應的系統平台上,從使用的指令集,內存對齊到可用的系統函數庫)。Android現在的主流CPU是armeabi-v7a。armeabi-v7a是針對有浮點運算或高級擴展功能的ARMv7 CPU。
當一個應用安裝在設備上,只有該設備支持的CPU架構對應的.so文件會被安裝。不同CPU架構的Android手機載入時會在libs下找自己對應的目錄,從對應的目錄下尋找需要的.so文件;如果沒有對應的目錄,就會去armeabi下去尋找,如果已經有對應的目錄,但是如果沒有找到對應的.so文件,也不會去armeabi下去尋找了。
以x86設備為例,x86設備會在項目中的 libs文件夾尋找是否含有x86文件夾,如果含有x86文件夾,則默認為該項目有x86對應的so可運行文件,只有x86文件夾而文件夾下沒有so,程序運行也是會出現findlibrary returned null的錯誤的;如果工程本身不含有x86文件夾,則會尋找armeabi或者armeabi-v7a文件夾,兼容運行。以armeabi-v7a設備為例,該Android設備當然優先尋找libs目錄下的armeabi-v7a文件夾,同樣,如果只有armeabi-v7a文件夾而沒有 so也是會報錯的;如果找不到armeabi-v7a文件夾,則尋找armeabi文件夾,兼容運行該文件夾下的so,但是不能兼容運行x86的so。所以項目中如果只含有x86的so,在armeabi和armeabi-v7a也是無法運行的。以上就是不同CPU架構運行時載入so的策略。
目前主流的Android設備是armeabi-v7a架構的,然後就是x86和armeabi了。如果同時包含了 armeabi,armeabi-v7a和x86,所有設備都可以運行,程序在運行的時候去載入不同平台對應的so,這是較為完美的一種解決方案,但是同時也會導致包變大。
armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬體浮點運算,目前絕大對數設備已經是armeabi-v7a了,所以為了性能上的更優,就不要為了兼容放到armeabi下了。x86也是可以兼容armeabi平台運行的,另外需要指出的是,打出包的x86的so,總會比armeabi平台的體積更小,對於性能有潔癖的童鞋們,還是建議在打包so的時候支持x86。
第三方的類庫只提供了armeabi下的.so文件,我們項目里適配了armeabi-v7a和x86,如果不在對應的文件下放對應的.so文件,就可能導致某些Android設備會出一些問題,我們可以復制armeabi下得.so文件到不同的文件夾下。如果第三方提供了不同平台的.so文件,則復制不同平台的.so文件到項目中對應的文件夾下即可。
關於.so文件之前有一個坑,svn會把提交的so文件過濾掉,在接第三方SDK的時候通過SVN更新了文檔,但是沒有注意到少了幾個so文件,浪費了大把的時間去找原因。記得去掉svn對so的忽略!!!