如何查詢當前手機的cpu架構,so庫匯入工程又出異常了?

來源:互聯網
上載者:User

標籤:mod   roc   body   class   x86_64   指正   and   原因   info   

執行adb命令:

adb shell 
cat /proc/cpuinfo

 

對應檔案夾

AArch64 == arm64-v8a

ARMv7 == armeabi-v7a

............等

其他你們自己發現吧。

注意:這裡我要說明一個開發中要注意的問題.

首先說明下android studio中apk打包so檔案的機制和機器自動選擇so庫檔案執行的問題

1.apk打包會把工程中出現的armeabi等檔案按照原來的檔案名稱直接打包到apk中,如果多個module中有相同的檔案夾,會把module中的so檔案合并成到一個檔案夾中來。

  例如:module中有so檔案夾armeabi,armeabi-v7a,x86,x86_64,(記住armeabi中具體的幾個so檔案)

      module中有so檔案夾armeabi,armeabi-v7a,x86(記住armeabi中具體的幾個so檔案)

      那麼最後打包產生的apk檔案中是這樣的

      

          

          

 

          很明顯兩個module中的相同檔案夾下so檔案合并了到一起了,那麼說明apk最後會合并so檔案。如果你的兩個module中有一個有另一個沒有的so檔案夾及內容,apk依然會合并so檔案夾,只是裡面只有一個module中的so檔案。例如上面圖片中,第一個module中就有"x86_64"這個檔案夾,而第二個module中就沒有,但apk中會發現裡面是有這個檔案夾的,只是裡面只有一個module中的so檔案,這裡就會引發一個問題,想知道就往下看。

 

2.打包完成後的apk檔案安裝到手機中,手機會根據自己cpu的架構選擇對應的so檔案夾執行so檔案,目前的手機有多種cpu架構 ,如:armeabi,armeabi-v7a,arm64-v8a,x86,x86_64等,你會發現這個和我們上面android工程中的so檔案夾名稱是一致的,這也說明了手機會選擇執行so檔案夾中的檔案。(注意:arm64架構的cpu,如果在apk中找到了arm64-v8a的檔案夾,那麼就會直接在裡面找到要執行了so庫檔案,如果沒有這個檔案夾就會找armeabi檔案下的so檔案執行)

 

瞭解了上面了知識再來看下面:

1.如果你的android studio工程中使用了多個module,並且module中都加入了so庫檔案,例如這樣:

 

那麼你就要注意下,如果你的手機是arm64架構的那麼按照上面的知識我們會知道,手機自動會去找arm64-v8a這個檔案夾下的so檔案,找不到該“檔案夾”的話就去找armeabi檔案夾下的so檔案執行,那麼按照上面的圖,手機會找不到檔案夾,最後選擇找了armeabi檔案夾,很好沒有錯。

但是,如果現在有個x86_64架構的手機那麼按照之前的知識,手機一旦發現有x86_64這個檔案夾就不會去找其他的檔案夾,認定了這個檔案夾中的so檔案執行,那麼你在操作app過程中點到或觸發了需要用到第二個module中的so檔案時,我們會發現這個檔案夾中根本沒有第二個module的so檔案,那麼很不幸這個會報錯,報的是找不到so檔案 "java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader couldn‘t find "(某個).so"  那麼現在你應該懂了是什麼原因,明明我有so檔案會什麼會提示找不到呢?這就是原因.

如果你理解到這兒了,也許有的同學很淡定的複製第二個module中的x86檔案夾然後改個名字變成x86_64,以為這樣就可以了,可以很明確的告訴你GG吧,這樣會報一個錯就是 “Java.lang.UnsatisfiedLinkError: 32bit can‘t 64bit” 也就是不能把32位檔案轉化為64位,雖然建檔案夾是建對了,但so檔案也不是亂用的。解決方案:去找找64位的so檔案吧。

 

現在我希望大家能明白一點了,謝謝閱讀,有錯誤請指正謝謝.

 

如何查詢當前手機的cpu架構,so庫匯入工程又出異常了?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.