簡體   English   中英

總是在android上以root身份在后台運行服務

[英]Always run service in background as root on android

根據Android Oreo之后的這個帖子Google引入了一些背景限制,因此在不顯示用戶通知的情況下,無法始終在后台運行服務

是否可以使用root權限實現此目的?

編輯:我看到人們投票決定關閉我的問題,因為顯然它看起來太寬泛了,但我正在運行LineageOS ,我想把我的應用程序作為系統服務運行,如果可能的話,我認為這將是在不修改源代碼的情況下可行。 例如,在安裝操作系統時,我可以閃存GApps,但它是可選的,它們似乎具有我正在談論的功能。 我也沒想到你會為我做我所有的研究,我願意接受能指出正確方向的答案。

確實有一個未記錄的shell命令,它可以用於白名單包,通過將它們添加到全局location_background_throttle_package_whitelist (我還沒有測試過):

settings put global location_background_throttle_package_whitelist "package1,package2,package3"

^這適用於location服務,但可能還有其他background_throttle設置:

settings list global | grep background_throttle

資料來源: XDA開發人員


另外在源代碼中我只找到了這些設置:

Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST
Settings.Global.LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS
Settings.Global.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS

文檔清楚地表明某些服務正被添加到臨時白名單中。 要找出實際上列出這些服務的白名單,就必須進一步挖掘。 這些后台服務限制實際上在Context.java中描述...而使用@UnsupportedAppUsage注釋的方法是僅系統使用的方法。


Firebase WorkManager仍然是可用的最佳選項 - 或基礎JobIntentService ,它仍將作為常規后台服務<Android O 閃爍的Android N或Lineage OS 14.1將是一種特定的解決方法,幾乎​​沒有考慮。

root權限提供超級權限的假設可能是一種誤解。 允許不受限制的位置訪問仍然非常有限,甚至谷歌自己的服務也只是暫時列入白名單。 從這些后台執行限制中排除的唯一服務是Linux 系統服務 ,用C++編寫(在JVM之外運行) - 而這是除了用Java編寫的Android后台服務之外的其他東西(在JVM中運行,所有擴展相同的受限Service類)。

我發現一種非常有效的技術是使用綁定服務。 不需要用戶通知,因為您從不調用startService(),它適用於Oreo及更高版本。 也不需要root。 綁定到始終運行的服務的好地方是來自應用程序對象的onCreate()方法。 每當您的應用程序運行時,該服務都將運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM