編輯:關於Android編程
最近公司框架剛移植完成,由於框架程序要調用子程序,每個子程序都是一個so文件,有好幾百個,把所有的so和apk打包不現實,及時可以升級維護也很麻煩。所以需要放SD卡中。考慮兩種方式
1
放到設備中的 /data/app-lib/包名/so文件 (還有一個默認路徑不記得了)程序程序初始化的時候 復制到這個路徑中,loadlibrary時會從兩個默認路徑中加載。
這種方式設備需要root,效率比較低,如果應用被卸載了所有的so都沒了。
2
直接放到SD卡中 通過dlopen 打開SD卡中的so 然後dlsym 查找函數地址
#include dlfcn.h//dlopen 頭文件
void (*pf_threadcannback)();//聲明函數指針類型
void (*pf_program)();
void *handle;
bool getMethod() {
handle = dlopen(//storage//emulated//0//lib//libprogram.so, RTLD_NOW);
// dlopen(/storage/emulated/0/lib/libtwolib-second.so,RTLD_NOW);
if (!handle) {
__android_log_print(ANDROID_LOG_INFO, JNIMsg,
Your params is null:%s, dlerror());
} else {
__android_log_print(ANDROID_LOG_INFO, JNIMsg, Your params is GOOD2);
}
pf_program = dlsym(handle, myFunc); //指向so中你想要調用的函數名稱
pf_threadcannback = dlsym(handle, ThreadCallBack);
if (dlerror()) {
__android_log_print(ANDROID_LOG_INFO, JNIMsg, dlsym no error);
return false;
}
return true;
// 釋放資源 建議程序退出時調用
// dlclose(handle);
}
找到了函數地址接下來直接執行
比如想調用so中的 myFunc()函數 執行 pf_program()就ok了
關於Android事件派發流程的理解
以前看了很多人介紹的Android事件派發流程,但最近使用那些來寫代碼的時候出現了不少錯誤。所以回顧一下整個流程,簡單介紹從手觸摸屏幕開始到事件在View樹派發。從源碼上
怎樣使用移動電源充電?移動電源怎樣用?
隨著手機的普及,移動電源也開始火起來了,非常的方便,出門沒電必備,能先將電充進移動電源裡,儲存在裡面,等手機沒電再用移動電源給手機充電。那麼小編現在就給大家
Android Studio 打包apk,自動追加版本號和版本名稱
默認AS大包好的apk是app-deubg.apk的,這樣的話版本多了找出一個bug在哪個版本中存在的,就非常的麻煩了,我們追加版本號和版本名稱後就非常好區分了。配置方法
Android 4.4 KitKat NotificationManagerService使用詳解與原理分析(二)__原理分析
前置文章: 《Android 4.4 KitKat NotificationManagerService使用詳解與原理分析(一)__使用詳解》 概況 在上一