总是在android上以root身份在后台运行服务

问题描述 投票:3回答:2

根据Android Oreo之后的this thread,Google引入了一些背景限制,因此如果不显示用户通知,则无法在后台运行服务。

是否可以使用root权限实现此目的?

编辑:我看到人们投票决定关闭我的问题,因为显然它看起来太宽泛了,但我正在运行LineageOS,我想把我的应用程序作为系统服务运行,如果可能的话,我认为这将是在不修改源代码的情况下可行。例如,在安装操作系统时,我可以闪存GApps,但它是可选的,它们似乎具有我正在谈论的功能。我也没想到你会为我做我所有的研究,我愿意接受能指出正确方向的答案。

android android-service root background-process android-8.0-oreo
2个回答
3
投票

确实有一个未记录的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 Developers


同样在source code我只发现了这些设置:

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

documentation清楚地表明某些服务被添加到临时白名单中。要找出实际上列出这些服务的白名单,就必须进一步挖掘。这些后台服务限制实际上是在Context.java中描述的......而用@UnsupportedAppUsage注释的方法是只有系统使用的方法。


Firebase WorkManager仍然是最好的选择 - 或者底层的JobIntentService,它仍将作为常规后台服务运行<Android O。闪烁的Android N或Lineage OS 14.1将是一个特定的解决方法,几乎​​没有考虑。

root权限提供超级权力的假设可能是一种误解。允许不受限制的位置访问仍然非常有限,甚至谷歌自己的服务也只是暂时列入白名单。从这些后台执行限制中排除的唯一服务是Linux system services,用C++编写(在JVM之外运行) - 这是除了Android背景服务之外的东西,用Java编写(在JVM中运行,所有扩展相同的限制Service类)。


1
投票

我发现一种非常有效的技术是使用绑定服务。不需要用户通知,因为您从不调用startService(),它适用于Oreo及更高版本。也不需要root。绑定到始终运行的服务的好地方是来自应用程序对象的onCreate()方法。每当您的应用程序运行时,该服务都将运行。

© www.soinside.com 2019 - 2024. All rights reserved.