android 載入動態庫的**在 dalvik/vm/native.cpp ( froyo 中是 native.c),載入的方式就是呼叫 libdl 中 dlopen, dlsym 這些函式
應該可以在這些函式中做些手腳,dlsym 替換為 my_dlsym 這樣就可以呼叫自己的函式
下面舉乙個例子,通常 dlopen, dlsym 使用如下
#include void* handle = dlopen("./hello.so", rtld_lazy);
typedef void (*hello_t)();
hello_t hello = (hello_t) dlsym(handle, "hello");
hello();
dlclose(handle);
我們把在另外乙個 hello1.so 提供 hello1()
#include void* handle = dlopen("./hello1.so", rtld_lazy);
typedef void (*hello_t)();
hello_t hello = (hello_t) dlsym(handle, "hello1");
hello();
dlclose(handle);
使用者依然可以得到他想要 hello 指標
同理 在 native.c 中定義
extern void *my_dlopen(const char *filename, int flag);
extern char *my_dlerror(void);
extern void *my_dlsym(void *handle, const char *symbol);
extern int my_dlclose(void *handle);
並把 native.c 相關函式,加上字首 my_, 就完全改變了 vm load 動態庫的方式
這種方式可以有多種應用方式,下面舉個栗子
比如你想做 profiling, 比如 func()
my_func()
而後在 my_dlsym 把對 symbol "func" 的呼叫替換為 my_func(), 就可以了
也許你說可以直接改 func(); 但當函式多的時候,可以在 my_dlsym中構造陣列更方便解決
也許你可以把對 bionic 呼叫,全部替換為 glibc 的,但要注意傳遞引數的 data struct 定義略有不同,還有 inline 和 巨集定義 的處理
android中webView 載入資料
可以使用loadurl 載入乙個url位址,也可以使用loaddata 或loaddatawithbaseurl 載入一段html 片段。loadurl 的使用大家應該都沒有什麼問題,但是loaddata 和loaddatawithbaseurl 在使用上的差異可能有些人還不太清楚。首先,從方法的定...
Android中的非同步載入
案例原始碼 asynctaskbythread.rar案例原始碼 整體思路 1 首先在oncreate方法中new newsasynctask 2 將url傳入,實現對此url的非同步訪問 3 先將url獲取的資料封裝到newsbean物件中,4 然後在newsasynctask類中將其設定到lis...
android中listview分頁載入資料
首先說下listview的優化方案,這也是面試中常考的題目。優化方案有三種 1,如果自定義介面卡,那麼在getview方法中判斷contentview是否為空,如果為空建立contentview並返回,如果不為空直接返回contentview。這樣能盡可能少建立view。2.給contentview...