當前位置:首頁 » 安卓系統 » android靜態庫

android靜態庫

發布時間: 2023-08-04 11:42:46

① android 怎麼引用一個靜態庫

由於工作需要,需要在framework中增加自己的動態庫,並且動態庫需要使用合作方提供的第三方靜態庫。但是在引入靜態庫編譯動態庫時總是提示失敗。具體如下:

1. 文件列表

可以看出這個配置文件的內容主要分為兩部分,第一部分預編譯靜態庫,這一過程不觸發構建過程,僅僅是重起了個名字,並且將該庫拷貝到某個路徑下(具體可以參看另一篇文章,NDK使用二進制庫的方法);第二部分是用於編譯動態本地庫,可以看出它通過LOCAL_STATIC_LIBRARIES關鍵字引入了之前預編譯的靜態庫。

② 如何在android使用已經有的靜態庫

關於編譯靜態庫:
android.mk和xxx.cpp放在新文件夾里:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \xxx.cpp
LOCAL_MODULE:= libx
include $(BUILD_STATIC_LIBRARY)
生成靜態庫libx.a文件

關於鏈接靜態庫:
有兩種方法:
1、把libx.a文件放在android.mk同一目錄下,添加:
LOCAL_PREBUILT_LIBS += libx.a
2、同上,添加:
include $(CLEAR_VARS)LOCAL_MODULE := libxLOCAL_SRC_FILES := libx.ainclude $(PREBUILT_STATIC_LIBRARY)LOCAL_STATIC_LIBRARIES += libx
貌似第二種是NDK里比較常見,第一種在其他的android.mk里比較常見。

③ 打包android的時候怎麼引入一些靜態庫

方法1 :
人為建立上面的文件夾並將靜態庫拷入;

方法2 :
就是通過編譯配置來做上面的動作。具體如下:
1. 將動態庫的編譯部分和靜態庫的編譯部分分開;
2. 在工作目錄下建立一個lib文件夾(必須是這個名字),將第三方的靜態庫拷貝進去,並且增加一個編譯配置文件Android.mk,具體內容如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
這個編譯配置文件就是要在obj下生成中間文件,供其他地方使用。
文件列表如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫

3. 在工作目錄下建立一個文件夾,並且將生成動態庫的相關文件全部拷貝進去。這里我們起的名字是src,當然也可以起其他名字。Android.mk內容如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
這里只要直接引入第三方庫就可以了。
文件列表如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
third_lib.h是靜態庫的頭文件,test.cpp很簡單,就是一個函數裡面順序調了一下靜態庫里開放的函數,內容如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫

3. 工作目錄下增加一個編譯配置文件Android.mk,作用就是查找工作目錄下所有的子目錄中的Android.mk來編譯。Android.mk的內容如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
好,工作都做完了,下面進入工作目錄mm -B 試一下,可以順利編譯成功。

④ android的動態載入和靜態載入的區別

兩者區別:
一,靜態庫的使用需要:
1
包含一個對應的頭文件告知編譯器lib文件裡面的具體內容
2
設置lib文件允許編譯器去查找已經編譯好的二進制代碼
二,動態庫的使用:
程序運行時需要載入動態庫,對動態庫有依賴性,需要手動加入動態庫
三,依賴性:
靜態鏈接表示靜態性,在編譯鏈接之後,
lib庫中需要的資源已經在可執行程序中了,
也就是靜態存在,沒有依賴性了
動態,就是實時性,在運行的時候載入需要的資源,那麼必須在運行的時候提供
需要的
動態庫,有依賴性,
運行時候沒有找到庫就不能運行了
四,區別:
簡單講,靜態庫就是直接將需要的代碼連接進可執行程序;動態庫就是在需要調用其中的函數時,根據函數映射表找到該函數然後調入堆棧執行。
做成靜態庫可執行文件本身比較大,但不必附帶動態庫
做成動態庫可執行文件本身比較小,但需要附帶動態庫
五:
首先糾正所謂「靜態連接就是把需要的庫函數放進你的exe之中」的說法。在真實世界中,有三個概念:Use
static
libary,
static
linked
DLL,
dynamic
linked
DLL.
多數人混淆了static
libary

static
linked
DLL的概念,當然他們有似是而非的「相似之處」,比如都用到.lib,下面具體說明。
使用靜態庫(Use
static
libary)是把.lib和其他.obj一起build在目標文件中,目標文件可以是.exe,也可以是.dll或.oxc等。一般情況下,可以根本就沒有「對應的」.dll
文件,如C
Run
Time(CRT)庫。一個例子就是,寫一個main(){},build出來並不是只有幾個位元組,當然有人會說那還有exe文件頭呢?是,即使加上文件頭的尺寸,build出的執行文件仍然「莫名的大」。實際上那多出來的部分就是CRT靜態庫。姑且可以把靜態庫.lib理解成外部程序的obj文件比較合理,它包含了函數的實現。

⑤ 安卓平台屬於動態庫操作嗎

屬於
靜態庫全稱靜態鏈接庫,動態庫全稱動態鏈接庫,看到全稱就知道什麼意思了吧?也就是說在鏈接的時候才會用到的庫,只有C/C++、OC語言才會有鏈接過程,java沒有。

在Android中說到靜態庫和動態庫,一般說的都是C/C++代碼,我們知道在android中是通過jni技術訪問到C代碼的,我們會把C/C++打包成so文件,這個就是動態庫(共享庫)。如果我們想要使用的C庫是.a形式的靜態庫時,我們要把.a包裝成so庫,具體網上有方法。

個人感覺在java語言中討論靜態庫和動態庫就是個偽概念,java是的編譯結果是位元組碼文件,不是二進制文件,而且沒有鏈接的過程,jvm在解釋執行java代碼的時候調用C++代碼只能是動態的。

在C++和object C開發中,用編譯鏈接的過程,靜態庫在鏈接過程中,會和自己寫的源代碼打到一塊,多個程序多個靜態庫。動態庫不會打到一塊,如果有共享情況的話,系統只會載入一次。

OC的代碼處理過程是很復雜的,有預處理、編譯、鏈接過程,預處理就是處理宏什麼的,編譯這個過程就很復雜了,有編譯前端和編譯後端,編譯稱機器碼(中間還會有匯編的過程),鏈接就是鏈接動態庫或者靜態庫。

Android(java)代碼處理過程就很簡單啦,畢竟是運行在虛擬機上的。沒有所謂的預處理,直接編譯,這里的編譯也就是把java代碼轉化成位元組碼,這個編譯和OC中的編譯可不是一個概念,只不過也這么叫而已。後續Aandroid還會用dex工具把.class打包成.dex,不同的VM模式(5.0以後都是ART)會對.dex進行不同的優化,具體看Android 編譯到運行APK過程總結。需要提一下的是,ART採用AOT和JIT技術,在安裝或者運行的時候,會把位元組碼轉化成機器碼,這個機器碼也會受VM控制的,具體看Android之Dalvik 、ART

C/C++、Object C屬於編譯型語言,這是毋庸置疑的,因為它們都會在生成安裝包之前編譯成機器碼。

⑥ Android中靜態庫和共享庫的區別

簡單來講:
靜態庫是在連接階段直接拷貝到代碼中使用的,而共享庫是由載入器載入到內存,在運行時使用的。
編譯出來的靜態庫(這里指jar包)里每個java文件對應的class文件都單獨存在,可以直接導入Eclipse等IDE使用
而編譯出來的共享庫(jar包),內部是Android位元組碼Dex格式的文件,一般無法導入Eclipse等IDE使用。Android.mk中由BUILD_JAVA_LIBRARY指定生成共享BUILD_STATIC_JAVA_LIBRARY指定生成靜態庫。

熱點內容
伺服器動態ip啟動程序 發布:2025-02-04 11:58:10 瀏覽:154
怎麼自己開個我的世界伺服器地址 發布:2025-02-04 11:51:44 瀏覽:810
整數是數存儲 發布:2025-02-04 11:39:44 瀏覽:694
12123六位密碼是多少 發布:2025-02-04 11:34:43 瀏覽:797
奧賽編程課 發布:2025-02-04 11:33:59 瀏覽:376
無法打開共享文件夾 發布:2025-02-04 11:29:50 瀏覽:635
電腦配置有哪些方面要求 發布:2025-02-04 11:27:38 瀏覽:525
安卓手機的米加大學什麼時候更新 發布:2025-02-04 11:26:39 瀏覽:705
長城哈弗f5潮版有哪些配置 發布:2025-02-04 11:24:22 瀏覽:540
編程兩階段 發布:2025-02-04 11:23:00 瀏覽:154