自從前兩周寫了《android app不死之路》這篇文件以后,不少朋友發(fā)信息或者留言,希望能有一份源碼和可以直接運行的demo,因為最近工作上的事比較忙,到今天才整理了一下。
demo和源碼的地址:
https://github.com/devxiaobai/android_daemon_process
測試驗證
baiyingjundeMacBook-Pro:Downloads baiyingjun$ adb shell ps | grep "com.aimfaraway.process"
u0_a56 2231 116 832732 18224 ffffffff 401434a0 S com.aimfaraway.process
u0_a56 2255 1 752 76 c05568d8 40035ebc S /data/data/com.aimfaraway.process/chkproc
baiyingjundeMacBook-Pro:Downloads baiyingjun$ adb shell kill -9 2231
baiyingjundeMacBook-Pro:Downloads baiyingjun$ adb shell ps | grep "com.aimfaraway.process"
u0_a56 2255 1 752 188 c05568d8 40035ebc S /data/data/com.aimfaraway.process/chkproc
u0_a56 2321 116 850344 25328 ffffffff 4014460c S com.aimfaraway.process
baiyingjundeMacBook-Pro:Downloads baiyingjun$
守護進程的編譯
這個守護是可獨立運行的程序,而不是動態(tài)庫。Android.mk中使用include $(BUILD_EXECUTABLE) 替代編譯so 文件的include $(BUILD_SHARED_LIBRARY)語句。
為了通過android L的PIE安全機制校驗,android.mk中添加
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
adb push 到android設備上,chmod 加執(zhí)行權限,測試運行之。
am命令啟動app
am命令詳細用法請自行搜索。
am startservice service_name 啟動一個service
am start -n package/activity_name 開啟一個Activity
由于Android 5.0之后禁止了隱式聲明Intent來啟動Service,所以只能曲線救國,demo中先開啟一個Activity ,在Activity的實現(xiàn)里startService。