自启动导致上架被打回的处理


第三方sdk带来的问题

项目因为需要用到推送服务,故接入友盟推送。然而在上架小米应用市场的时候被打回了。 在打回的报告《小米移动应用隐私合规检测报告》中提示是因为自启动的缘故

image.png

image.png

1
com.taobao.accs.EventReceiver action=android.intent.action.BOOT_COMPLETED

image.png

同时检查了代码,发现自身的代码没有任何的广播和服务涉及到保活和自启动,但是,没办法,小米把EventReceiver的行为算在自身应用而非第三方sdk上,而上一个提交的版本在最初的弹窗上做了文案提示,但是小米不认,只要从根本上处理自启动问题。

判断apk到底申请了哪些权限

aapt

首先先判断下apk在配置文件中到底有哪些权限。 根据aapt(sdk文件夹的build-tools文件夹下的aapt.ext)

1
aapt dump bump badging XXX.apk

image.png

可见,虽然没有在AndroidManifest.xml文件中申请android.permission.RECEIVE_BOOT_COMPLETED 但是,最后apk文件打包整合的过程中将友盟的权限同时申请下来。

解决方案

tools:node=”remove”

这个方法可以直接删除第三方申请的权限。 在AndroidManifest.xml文件中增加

1
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" tools:node="remove"/>

重新运行下,用上面的方法,用aapt在检查一遍,发现成功回收监听开机广播的权限了,大功告成。

再度尝试

结果没过两天,apk又被打回来了,仍然是自启动的问题。

重新检查了打回的信息,发现仍然是那个自启动第三方SDK,友盟的频繁自启动。可是权限都被收回了没办法,重新去找相关资料。

既然如此,那边在配置文件AndroidManifest.xml中再加入几段代码

1
2
3
4
5
6
7
8
9
<!--友盟自启动-->
<receiver
android:name="com.taobao.accs.EventReceiver"
android:exported="true"
tools:node="remove">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>

重新申请上架。

结语

对于友盟申请这个权限,感觉可能是用于离线推送,走厂商通道,在app被杀死后让用户仍能接受到推送消息。

但是,重要的是,友盟的开发者文档中竟然搜索不到任何关于自启动相关的文章和相关问题。可明明友盟在接入文档里有[合规指南],其中提及隐私协议,但却丝毫未提及自启动相关的内容