关于开机自启动功能需要的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只能安装在厂商的平板上,在其他设备上是无法安装的(因为每种设备的系统用户的签名文件都是不一样的)。
所以开发时在实机上测试的时候不要签名。最后发布的时候再签名。

Last modification:March 25, 2023
If you think my article is useful to you, please feel free to appreciate