安卓手機打開.so文件需要下載Native Libs Monitor這個app,這個應用可以幫助我們理解手機上安裝的APK用到了哪些.so文件,以及.so文件來源於哪些函數庫或者框架。我們也可以自己對app反編譯來獲取這些信息。
so文件是手機的一些運行庫文件,在系統lib的文件夾下,置換移植其他系統的程序也需要修改更換相關so文件;沒有它系統軟體不能運行,哪部分損壞就影響相對功能,電話接打,通訊錄,相機等等都是要依賴so文件使用的。so文件需要資深安卓大師更改,一般都是現成的搬運移植,打開它沒有什麼意義。安卓手機想要查看.so文件就需要下載Native Libs Monitor。
so是shared object的縮寫,見名思義就是共享的對象,機器可以直接運行的二進制代碼。大到操作系統,小到一個專用軟體,都離不開so。so主要存在於Unix和linux系統中。so是與平台相關的二進制機器碼,Android應用支持的cpu架構取決於APK中位於lib或jniLib目錄中的.so文件。
由於Android基於Linux Kernl的,也繼承了Linux中所有so相關的設計。
除了系統方面的原因,Android開發者還要知道以下幾點:
so機制讓開發者最大化利用已有的C和C++代碼,達到重用的效果,利用軟體世界積累了幾十年的優秀代碼。
so是二進制,沒有解釋編譯的開消,用so實現的功能比純java實現的功能要快。
so內存分配不受Dalivik/ART的單個應用限制,減少OOM。
『貳』 linux上.so文件可以直接運行嗎
那肯定能被執行啊,看下面圖 內核中是把EXEC類型和DYN(就是DYN)都放開執行的
執行是能執行(如/lib64/libc-xx.so),但如果不特殊處理下 一般so執行都會報段錯誤的, 給你的so加個.interp節指定下連接器地址並指定下入口函數就可以了正常執行了哈
『叄』 在使用jni調用so庫時出現的找不到文件是怎麼回事
ossible cause: can't load ARM-bit .so on a IA 32-bit platform
ARM結構的程序,不可以在X86結構的CPU上執行
『肆』 安卓apk解壓後得到的.so文件能直接放項目裡面調用裡面的方法嗎
使用Androidstudio創建一個Android項目
打開Androidstudio創建一個項目,命名為tryndk
在項目中新創建一個類,在其中聲明native方法在src/main目錄下創建一個工具類,用來存放native方法
在Javautils類創建兩個方法,聲明為native
然後選中項目,點擊build->make project,在項目中的build->intermediates->classes->debug->com->example->tryndk下就能看見javautils.class文件了
在Androidstudio中打開終端(View->ToolWindows->Terminal)在terminal中進入到main目錄中,然後在鍵入javah -d jni -classpath ../../build/intermediates/classes/debug com.example.tryndk.javautils記得debug 後面有個空格。然後就能在src/main目錄下看到jni文件夾,裡面存放了一個頭文件com_example_tryndk_javautils.h,裡面生成了函數聲明,
Java_com_example_tryndk_javautils_getStringFromNative為方法名,其中getStringFromNative為在javautils文件中創建的getStringFromNative方法。
然後在jni目錄下創建一個c文件命名為MyJni.c,實現相應的方法
方法中就是返回了一個字元串。
『伍』 Android Studio導入.so文件無法識別載入怎麼回事導致app老是閃退
說明so有問題,或者so沒有對應你手機的cpu架構的。