一個Android多平臺問題相容解決思路
問題:使用AS打出來的簽名包,在除錯一直用的5.0的小米手機上可以正常執行,4.4的聯想手機上閃退,5.1的模擬器上閃退。
丟擲:java.lang.UnsatisfiedLinkError,ClassLoader找不到相關的so庫。
解決思路:
猜想跟CPU架構有關係,查詢如下(cat /proc/cpuinfo):
模擬器: 電腦使用的是Intel的cpu x86_64架構
聯想:Processor : ARMv7 Processor rev 2 (v7l) armeabi-v7a
小米:Processor : AArch64 Processor rev 2 (aarch64) arm64-v8a
問題一、Android支援哪些cpu架構?
答案很容易搜尋到:android目前支援7種架構
-
x86_64
-
x86
-
mips64
-
mips
-
armeabi-v7a
-
armeabi
-
arm64-v8a
問題二、系統是怎麼查詢so庫的呢?
查詢so庫規則:
執行的時候,系統會到Jnidirs目錄裡查詢so庫,會根據當前平臺架構查詢對應的目錄。這裡面有一個規則是這個問題的元凶。當你只提供了armeabi目錄時,armeabi-v7a、arm64-v8a架構的程式都會去armeabi裡尋找,而當你同時也
而簽名包裡面這七個目錄都有,這個問題後面討論。
驗證猜想:
將app-release.apk使用打包軟體開啟,刪除其中的armeabi-v7a目錄,發現聯想手機可以正常運行了(去armeabi裡面尋找了)。移除x86_64資料夾,模擬器可以正常執行(去x86裡面尋找了)。
問題三、簽名包為什麼七個目錄全都有?
對應Jnidirs目錄中的七個目錄。開啟簽名包,發現這七個目錄都有。奇怪的是我的專案裡只有x86、armeabi和arm64-v8a三個型別的so庫。開啟其他的目錄發現都是隻有一個so檔案:libgenius_graphics.so。百思不得其解這個從何而來,查詢build-gradle的時候發現:compile 'net.qiujuer.genius:graphics:2.0.0-beta8' 非常相似,這是一個開源的UI庫。猜測是引入這個庫在編譯的時候自動生成各個平臺下的libgenius_graphics.so檔案。移除之,rebuild,確實如此,只剩下原本的三個資料夾。
問題四、armeabi能否相容x86平臺?
而當我連x86資料夾都移除,則根本不能安裝在模擬器上,提示:INSTALL_FAILED_NO_MATCHING_ABIS。證明x86架構不會去尋找armeabi目錄。當你想在x86的機器上執行app時,一定要獲得對應的x86版本so庫檔案。
相關推薦
一個Android多平臺問題相容解決思路
問題:使用AS打出來的簽名包,在除錯一直用的5.0的小米手機上可以正常執行,4.4的聯想手機上閃退,5.1的模擬器上閃退。 丟擲:java.lang.UnsatisfiedLinkError,Cl
在cmakeLists中這是多平臺相容
在你想要做成庫的.h檔案中新增如下的程式碼: #ifndef DBZHANG_HELLO_ #define DBZHANG_HELLO_ #if defined _WIN32 #if LI
Android資料庫併發操作解決思路
資料庫作為Android資料儲存重要的一部分,相信很多應用中都會用到,面試也會遇到很多關於資料庫的問題。實際開發中我沒遇到過特別複雜的資料庫使用,所以對這一塊的優化沒怎麼研究過。 以前面試的時候被問到過這麼一個問題: 面試官:資料庫併發訪問怎麼處理? 我:
一個解決unity3d 多平臺下完美本地文字檔案讀取的方法
http://blog.csdn.net/hpsoft/article/details/8227255 unity3d可以把遊戲釋出在很多遊戲平臺下,但unity3d在不同的執行平臺下,本地檔案路徑是不一樣的,這樣給我們用給應用配置的本地文字檔案的讀取帶來不小的麻煩,要
Android---apk打包libs自動刪除第三方so問題解決(armeabi/armeabi-v7a等多平臺so)
開發工具eclipse,如果是as,則不存在這樣的問題。在引用第三方so時,常常會碰到一個問題:編譯之後,libs中的第三方so被刪除掉了,導致程式無法執行,而且第三方so是多個平臺(armeabi/armeabi-v7a等等)的,這個問題如何解決?首先在jni目錄下,新建一
android-繼承BaseAdapter--自己定義適配器,getView運行多次的解決方法
能夠 popu con data ssa baseadapt tracking you idt 定義的getView運行多次的ListView布局: <ListView android:id="@+id/lv_messages"
Cocos2d-x: 安卓打包問題 “ GoogleAPIs:21 不是一個有效的 Android 目標平臺 ”
一個 androi 發生 cocos2 api clip strong googl color 問題:GoogleAPIs:21 不是一個有效的 Android 目標平臺。 產生原因:這是由於使用Eclipse運行Android項目後, 項目的bulid Targe
Android多線程分析之中的一個:使用Thread異步下載圖像
htm .net ins ace tca inside 分享 sdi 集中 Android多線程分析之中的一個:使用Thread異步下載圖像羅朝輝 (http://blog.csdn.net/kesalin)CC 許可。轉載請註明出處打算整理一下對 Android Fr
linux刪除不了文件, 修改文件屬性也刪除不了的一個解決思路
邏輯 連接 文件屬性 英文 一個 -- span 隱藏屬性 linux 場景: 公司要求卸載軟件時, 也包含卸載一個目錄下的所有文件. 於是去修改刪除文件的shell腳本, 添加了刪除文件及文件夾的命令(當然是在root權限下的) 如: rm -rf /home/v
一例對一個或多個實體的驗證失敗。有關詳細信息,請參閱“EntityValidationErrors”屬性的解決
tro https span cep 實例 tps lte .data 防止 這個問題相信只要是做MVC的,都碰到過,也都知道錯誤的原因,就是觸發了定義的實例字段校驗規則。比如定義的不為空,但是為空了,或者定義的字段長度為50,但是超過50了。 可是有時雖然知道是這樣,
短信轟炸,得罪一個Android轉Python的程序員是件多麽可怕的事?
trac apk term 一點 測試 實用 -s lar ext Android支持python的,首先我們要明確這一點。 Android運行python,需要先安裝龐大的python及需要的庫。開發出的app需要包含python,安裝包很大。運行的速度也會稍微
每一個程序員都應該知道的高並發處理技巧、創業公司如何解決高並發問題、互聯網高並發問題解決思路、caoz大神多年經驗總結分享
海量數據 限定 微博 https 2.3 tst 日誌分析 如何 ive 目錄: 場景及解決方法解讀 認識負載 數據跟蹤 腦圖、caoz大神公眾號分享 參考資料 秉承知其然及其所以然的思路,以撥蟬拔絲的思維,一一解讀各個技巧的使用場景: a.網絡通道+前臺控制 原因
[開源應用]-一個Android平臺的 IM 應用
平臺 android model ogr github img 咖啡 com upload 這是一個簡單的 IM 應用,寫這個應用的本意只是想練練手,暫且實現了私聊和群聊功能,後邊再根據用戶反饋情況再來更新吧~ 應用完全是以 MVVM 的思想來實現的,使用的是 Google
一次下載多個檔案的解決思路-JS
一次下載多個檔案的解決思路(iframe) - Eric 真實經歷 最近開發專案需要做檔案下載,想想挺簡單的,之前也做過,後臺提供下載介面,前端使用window.location.href就行了唄。不過開發的時候發現,有些檔案有附屬檔案,點選 下載按鈕 需要下載兩個檔案,而且不能使用壓縮包的形式。想想
VS2013無法載入解決方案中專案,提示未能正確載入解決方案中的一個或多個專案
現象:開啟一個工程,上午還能正常操作,下午就打不開了。試了所有的工程都打不開。 提示: 未能正確載入解決方案中的一個或多個專案 解決辦法: 1、關閉VS; 2、去C:\Users\AppData\Local\Microsoft\VisualStudio\12.0\ComponentMod
多執行緒深入學習及面試解決思路
課程目標 執行緒與程序區別 為什麼要使用多執行緒? 多執行緒應用場景? 多執行緒建立方式 獲取執行緒物件以及名稱 守護執行緒 多執行緒執行狀態 join()方法作用 多執行緒分批處理資料 作業題 面試題 備註單詞 執行緒與程序區別
android 多功能自定義畫板控制元件(用於解決特定需求)
在專案中需要做一個可以自定義軌跡,但始終只有一條線,並且支援撤銷(撤銷單位為MotionEvent的down事件到up事件),還要支援動畫預覽等功能,最重要的是能夠按照間隔畫素來獲取所有點的座標,用於專案的其他功能。 整體的思路 1.專案中的應用場景需要畫板是一個圓形的,這個好實現用canv
Android多程序app中Application回撥onCreate()方法被執行多次分析及解決
最近工作中碰到一個問題,在優化app,使用DDMS檢視Application log過程中看到,app啟動了三個程序,一個主程序,兩個附帶的程序。如下圖可看到一個app啟動的三個程序。 自定義Application回撥方法onCreate()被執行了3次。開始不知是何原因。 相
Java之多執行緒安全(屌絲版,兩大解決思路,要麼不去競爭(開闢執行緒副本)、要麼有順序的競爭資源(用鎖規定執行緒秩序))
0、多執行緒安全,如果多個執行緒操作一個變數,每次都能達到預期的結果,那麼說明當前這個類起碼是執行緒安全的,我這白話的,可能有點噁心。 1、看看牛人是怎麼說的,為什麼多執行緒併發是不安全的? 在作業系統中,執行緒是不再擁有資源的,程序是擁有資源的。而執行緒是由程序建立的
一個頁面多個swiper問題解決
關於一個頁面中多處使用swiper而引起的翻頁問題 最近公司專案做了一個雙12活動,活動頁面中存在18個輪播!!!然後在進行swiper宣告的時候發現了問題,如果頁面只是有一兩個輪播,可以直接給每一個swiper-container 元素重新增加一個新類名,然後使用新類名進行宣告。