參考
創新互聯是一家專注于網站制作、成都網站制作與策劃設計,武陵網站建設哪家好?創新互聯做網站,專注于網站建設十余年,網設計領域的專業建站公司;建站業務涵蓋:武陵等地區。武陵做網站價格咨詢:028-86922220
在
這篇文章中征程的apk:JniTest.apk把后綴改為JnitTest.zip,打開這個文件,在lib下面會有生成好的.so文件,copy出來。
可以發現這個.so文件叫libMyTest.so。
然后把這個so文件copy到新的項目的libs\armeabi下,使用和正常的.so文件一樣。然后修改app的gradle中的android節點中加入:
然后在main\java 建立生成.so文件那個項目的包名, 把NdkJniUtils文件copy過來。當然封裝成jar包更好啦。
到此完成,調用NdkJniUtils的方法即可獲得.so文件中的內容。
01
安卓手機打開.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。
我們在Android應用程序會常常的加載一些So文件來完成我們的目標,那么我們的APK加載So是有哪些平時我們沒有注意到的事情呢?
1. 首先我們一般開發會遇見兩種APK(其實一般大部分只會遇到一種),一種為系統級APK,另外一種為普通APK。那么這個兩種APK跟So加載有什么關系呢?別急,讓我們先聊聊我們那些操作會產生這些類型的APK。
普通級AKP:?
pm install +?包名將會把APK安裝到 /data/app 目錄下,同時會把So映射到/data/app-lib/包命/ 目錄下。這個就是普通的APK(pm Install -r 會替換原有的APK,當然必須是一樣的簽名)。
系統級APK:
push? + 絕對路徑 + 包名 /system/app 目錄下(必須把原有的包名刪除哦!),這時APK就會在System/app下面了,這時你需要把你的APK的So 同時push到system/lib里面。因為apk里面的So并不會自動映射到system/lib下面。
一般我們在使用加載So的方法時候,會使用到System.load(pathName)和?System.loadLibrary(libName)這兩種方法。這篇文章主要講講System.load(pathName)這個絕對路徑加載的注意點。
我們通常會直接使用
context.getApplicationInfo().nativeLibraryDir +/具體名字.so? 來讓系統幫我尋找加載So所需要的路徑。那么這里問題就來了。
如果是系統級APK
context.getApplicationInfo().nativeLibraryDir = /system/lib/
如果是普通級APK
context.getApplicationInfo().nativeLibraryDir ?=/data/data-lib/PackageName/ 對!就是那個映射的So系統會根據這個去data/app/包名下面尋找真正的So文件。
這個需要注意的細節,主要用于在中間件,系統預置程序的研發人員與測試上面。我們在拿到芯片廠商給予調試模式的開發硬件上進行Demo和So的更換測試的時候,需要自己和測試都需要知道,自己安裝的APK是什么類型,會加載什么路徑,以免我們的底層老司機在幫忙測試問題的時候造成不必要的麻煩。
SO文件格式即ELF文件格式,它是Linux下可執行文件,共享庫文件和目標文件的統一格式。TOC這個詞其實是從出版界借用過來的,指的就是每一本書正文前面的“目錄”,它的作用地球人都知道:如果想快速找到書中某一內容,可以先查TOC,然后按照TOC指明的頁碼直接翻即可。
由于Android操作系統的底層基于Linux系統,所以SO文件可以運行在Android平臺上。Android系統也同樣開放了C/C++接口供開發者開發Native程序。由于基于虛擬機的編程語言JAVA更容易被人反編譯,因此越來越多的應用將其中的核心代碼以C/C++為編程語言,并且以SO文件的形式供上層JAVA代碼調用,以保證安全性。
so文件是unix的動態連接庫,是二進制文件,作用相當于windows下的.dll文件。
補充:
在Android中調用動態庫文件(*.so)都是通過jni的方式。
Android中加載so文件的提供的API:
void System.load(String pathName);
說明:pathName:文件名+文件路徑;
當前題目:android的so文件,android 編譯so文件
分享鏈接:http://vcdvsql.cn/article38/dsdigpp.html
成都網站建設公司_創新互聯,為您提供外貿建站、網站排名、搜索引擎優化、手機網站建設、小程序開發、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯