关于开机自启动功能需要的APP签名
开机自启动需要在配置中添加以下设置,以便和系统用户共享底层的启动完毕消息通知。
<manifest ... android:sharedUserId="android.uid.system" ... />
...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
<application
...
<!-- BootReceiver类是一个独立于APP主功能以外的自定义类,用于监听系统启动完毕的消息并启动APP -->
<receiver
android:name=".BootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
...
</application>
</manifest>
限制
一旦添加了以上设置,这个app就必须要和设备的系统用户使用相同的签名才可以安装在此设备上。所以必须使用平板厂商提供的系统用户key文件: platform.pk8/platform.x509.pem 对app进行签名。厂商提供的签名工具包(10.0ApkSystemSignTool,原文件名:10.0Apk系统签名)里包含了签名用的小工具和上述key文件。
签名工具的兼容性问题
实测在jdk16和jdk20环境下均不能正确运行,在jdk8环境下可以正确运行签名工具。另外,签名工具在非中文系统下(比如日文系统)会出现乱码,所以我将工具内的提示文本修改成了英文。最后,工具的使用说明与实际工具稍有出入,不需要修改app文件名,执行“签名脚本.bat”后拖拽文件到窗口上得到文件路径后回车即可。
发布
用厂商的key签名后的app只能安装在厂商的平板上,在其他设备上是无法安装的(因为每种设备的系统用户的签名文件都是不一样的)。
所以开发时在实机上测试的时候不要签名。最后发布的时候再签名。