編輯:關於Android編程
Android 加載動態庫的代碼在 dalvik/vm/Native.c,加載的方式就是調用 libdl 中 dlopen, dlsym 這些函數
應該可以在這些函數中做些手腳,dlsym 替換為 my_dlsym 這樣就可以調用自己的函數
下面舉一個例子,通常 dlopen, dlsym 使用如下
#includevoid* handle = dlopen("./hello.so", RTLD_LAZY); typedef void (*hello_t)(); hello_t hello = (hello_t) dlsym(handle, "hello"); hello(); dlclose(handle);
我們把在另外一個 hello1.so 提供 hello1()
#includevoid* 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);
這種方式可以有多種應用方式,下面舉個栗子
比如你想做 profiling, 比如 func()
my_func() { // instrument code func() }
而後在 my_dlsym 把對 symbol "func" 的調用替換為 my_func(), 就可以了
也許你說可以直接改 func(); 但當函數多的時候,可以在 my_dlsym中構造數組更方便解決
也許你可以把對 bionic 調用,全部替換為 glibc 的,但要注意 data struct 定義的不同,inline 和 宏定義
微信聊天現在非常火,是因其界面漂亮嗎,哈哈,也許吧。微信每條消息都帶有一個氣泡,非常迷人,看起來感覺實現起來非常難,其實並不難。下面小編給大家分享實現代碼。先給大家展示下
要適配不同的屏幕,首要需要的是要能夠將不同的屏幕分辨出來,android提供了若干不同的維度來進行限定(qualifier,有的翻譯為限定詞)上圖所示為常用的一些維度,不
Android開發中遇到要從相冊選擇圖片時,大多數人都會選擇調用Android自帶的相冊,畢竟這樣可以節約時間,又不用自己去處理圖片的問題,不過這樣也會產生一些問題,有些
Android UI- PullToRrefresh自定義下拉刷新動畫 如果覺得本文不錯,麻煩投一票,2014年博客之星投票地址:http://vote.blog.csd