Android 静默更新 apk 然后重启应用

Android silently updating apk and then restart the app

好吧,首先我想澄清一下,我并不是想达到任何可疑的目的。我们有自己的企业应用程序,只适用于我们自己的硬件(我们没有使用 Google 游戏商店)。 phone 也已植根。我已经实现了我们自己的 Apk 更新机制。到目前为止,我已经使用以下代码成功地静默安装了 apk

    try {
        val command = "pm install -r " + file.path
        val openAppCommand = "am start -a android.intent.action.MAIN -n" +
                BuildConfig.APPLICATION_ID + "/.MainActivity"
        val process = Runtime.getRuntime().exec(arrayOf("su", "-c", command, openAppCommand))

        val exitVal = process.waitFor()
        if (process.exitValue() == 0) {
            Log.e("updateAppSilently", "Apk installed")
        } else {
            Log.e("updateAppSilently", "Something went wrong while installing apk")
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }

openAppCommand 被忽略,因为重启后当前进程被终止。

我什至尝试过

       <receiver android:name="com.updatesmanager.AppUpdateBroadcastReceiver"
            android:enabled="true" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
            </intent-filter>
        </receiver>

和 class 文件

class AppUpdateBroadcastReceiver : BroadcastReceiver(){
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.d("AppUpdateBroadcastReceiver", "App got updated!")
        val intent = Intent(context, MainActivity::class.java)
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

        context?.startActivity(intent)


       /* Log.d("AppUpdateBroadcastReceiver", "App got updated!")
        val command = "am start -a android.intent.action.MAIN -n" +
                BuildConfig.APPLICATION_ID + "/.MainActivity"
        val process = Runtime.getRuntime().exec(arrayOf("su", "-c", command))
        val exitVal =  process.waitFor()

        if(exitVal == 0){
            Log.e("AppUpdateBroadcastReceiver", "App launched")
        }*/
    }

}

我什至尝试过设置闹钟,但它不起作用,因为该应用程序 updated/reinstall 所以闹钟会被清除。

非常感谢任何形式的帮助。

好吧,这很愚蠢,但我没有更新更新 apk 的版本代码(尽管我坚信广播接收器应该在 pm install -r 命令为 运行 的情况下触发,无论versionCode,因为包被替换了)。当我增加当前 apk 的 versionCode 时。 AppUpdateBroadcastReceiver 确实被触发了。