編輯:關於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事件派發流程,但最近使用那些來寫代碼的時候出現了不少錯誤。所以回顧一下整個流程,簡單介紹從手觸摸屏幕開始到事件在View樹派發。從源碼上
隨著手機的普及,移動電源也開始火起來了,非常的方便,出門沒電必備,能先將電充進移動電源裡,儲存在裡面,等手機沒電再用移動電源給手機充電。那麼小編現在就給大家
默認AS大包好的apk是app-deubg.apk的,這樣的話版本多了找出一個bug在哪個版本中存在的,就非常的麻煩了,我們追加版本號和版本名稱後就非常好區分了。配置方法
前置文章: 《Android 4.4 KitKat NotificationManagerService使用詳解與原理分析(一)__使用詳解》 概況 在上一