greenify / greenify.github.io

Portal
57 stars 4 forks source link

只写class不写package和action #1

Closed ipcjs closed 7 years ago

ipcjs commented 7 years ago

使用绿色守护自带的唤醒剪断功能,显示酷安App被唤醒的方式是:com.xiaomi.mipush.sdk.PushMessageHandler,然后我反编译apk,这个类对应的清单文件如下:

<service
  android:enabled="true"
  android:exported="true"
  android:name="com.xiaomi.mipush.sdk.PushMessageHandler" /> 

没有action。。。然后我写了如下处方1

<prescription xmlns="http://greenify.github.io/schemas/prescription/v1" 
    type="service" 
    class="com.xiaomi.mipush.sdk.PushMessageHandler" >
</prescription>

导入时提示不合法。。。加上package之后,导入成功,处方2如下:

<prescription xmlns="http://greenify.github.io/schemas/prescription/v1" 
    type="service" 
    class="com.xiaomi.mipush.sdk.PushMessageHandler" 
    package="com.coolapk.market">
</prescription>

Nexus5+CM14.1上实测,可以拦截对酷安App的唤醒。

处方2写死了package,只对酷安App有效,对使用了同类推送SDK的App无效。 要是绿色守护支持处方1那种写法,就方便多了,不知道实现起来麻不麻烦?

oasisfeng commented 7 years ago

很遗憾,处方1虽然也是我一开始就希望支持的形式,但由于Android底层机制的制约,暂时还无法实现。

不过我已经想到了一个变通支持这种形式的办法,春节后会原型验证一下,再更新到这里。

oasisfeng commented 7 years ago

从编写一个高质量处方的角度,一般并不建议完全屏蔽整个组件。最好能限定intent-filter进行屏蔽(这也是目前已经支持的形式),这样可以避免误伤该组件所支撑的其它重要功能。Greenify未来的版本中将提供这方面的详细线索,比如具体触发唤醒的intent,便于大家编写更精准的处方。