Android下使用dlopen函式動態呼叫

2021-06-19 19:25:54 字數 1645 閱讀 4347

在這篇文章(

【09.03.25】linux環境中dlopen函式的簡單應用)中。實現了在ubuntu linux環境下使用dlopen函式動態呼叫.so鏈結庫。但是也提到了在android下未能成功。由於android也是使用linux核心,因此估計程式本身可能並沒有什麼錯誤,問題應該是出現在android.mk檔案中。今天早上試著修改了一下android.mk,終於將這個問題解決了。

好在兩個c程式和乙個.mk檔案並不是太長,現將它們貼一遍

#include

#include

#include

int main()

else

printf("dlopen ok!\n");

func=dlsym(p,"max");

printf("%d與%d相比,%d為大數。\n",a,b,(*func)(a,b));

dlclose(p);

}#include

int max(int x,int y)

local_path:= $(call my-dir)

include $(clear_vars)

local_src_files:= \

dl2.c

local_prelink_module := true

#local_cflags=-fpic

local_module:= dl2

include $(build_shared_library)

include $(clear_vars)

local_src_files:= \

dl1.c

local_shared_libraries := \

libdl

#local_cflags=-ldl

local_prelink_module := true

local_module:= dl1

include $(build_executable)

上一次之所以失敗,原因似乎是使用了紅色字型的那一句,因為我將其更換為藍色字型的那一句,問題就解決了。看來這樣寫在鏈結時才能正確找到libdl.so,而包含該.so檔案是使用dlopen函式的保證。

將這三個檔案放在android原始碼目錄下的development目錄下的dl資料夾中(dl資料夾是新建的),然後在終端中使用root許可權進入到android原始碼目錄下,執行 make dl1。成功後將會在android原始碼目錄/out/target/product/generic/system/lib/中生成dl2.so動態鏈結庫檔案,在android原始碼目錄/out/target/product/generic/system/bin/中生成dl1可執行檔案。

使用以下命令將它們放入android模擬器,注意要先啟動emulator

adb push android原始碼目錄/out/target/product/generic/system/lib/dl2.so /data

adb push android原始碼目錄/out/target/product/generic/system/bin/dl1 /data

進入data資料夾執行

adb shell

# cd data

# ./dl1

87 9(這裡隨便輸入兩個數)

dlopen ok!

87與9相比,87為大數。

Android 程式設計下字型檔的使用

在安卓作業系統下對於 textview 字型的支援非常有限,預設情況下 textview 的 typeface 屬性支援 sans serif monospace 這三種字型,如果在沒有指定字型的情況下,系統缺省會使用 sans 作為文字顯示的字型。但這三種字型只支援英文,也就是說只要你顯示的文字是...

Android 下使用tcpdump 抓包工具

1.先給手機刷root許可權,執行命令 adb root adb remount ok後 把tcpdump放到c盤根目錄下 c 2.執行命令 adb push c tcpdump data local tcpdump 這個命令是把tcpdump拷到手機中去 3.adb shell chmod 675...

android下使用htop和lsof

在編譯並使用基於android的htop 2.0.2過程中 引用一 發現檢視程序使用檔案控制代碼 快捷鍵 l 實際呼叫命令lsof 資訊一直為空白,經研究發現原來android的lsof其實是包含在toolbox中的子功能,其功能很單一不支援命令列引數,現單獨編譯源 生成程式供htop呼叫。一 編譯...