Android静默更新apk,然后重新启动应用程序

2023-12-03

好吧,首先我想澄清一下,我并不是想达到任何可疑的目的。我们有自己的企业应用程序,仅适用于我们自己的硬件(我们不使用 Google Play 商店)。手机也已root。我已经实现了我们自己的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 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")
        }*/
    }

}

我什至尝试设置警报,但它不起作用,因为应用程序已更新/重新安装,因此警报被清除。

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android静默更新apk,然后重新启动应用程序 的相关文章

随机推荐

  • 当源有密码时 MS Access DoCmd.Transferdatabase

    我需要每月从各种数据库导入表 导入表后 数据库将被存档并且不会再次查看 我有以下 VBA 代码 当数据库不受密码保护时 该代码可以正常工作 Private Sub ImportTheData ByVal dbImport As String
  • 如何读取 cassandra nodetool 直方图百分位数和其他列?

    如何读取 cassandra nodetool 直方图百分位数和其他列 Percentile SSTables Write Latency Read Latency Partition Size Cell Count micros micr
  • 尝试获取 Yii 中非对象错误的属性

    情况 1 我得到一个 CActiveRecords 数组并尝试对其进行循环 如下所示 foreach pendingTasks as task if task gt task gt employee id 1 some logic here
  • Windows 10 上的 VS 2015 中的 XAML 设计器崩溃 [重复]

    这个问题在这里已经有答案了 我创建了一个全新的应用程序 在 VS 默认创建的表单上打开 XAML 编辑器 然后它崩溃了 我问了我原来的问题here 有人错误地将其标记为重复项 显然我的问题不是关于空引用异常 我尝试使用 VS 的另一个实例来
  • Flask 中应用程序范围的请求挂钩。如何实施?

    可以在应用程序工厂内定义共享请求挂钩吗 def create app config name app Flask name app config from object config config name db init app app
  • 在 Visio 中选择活动页面

    编辑 我没有明确表达这一意愿 我正在尝试打开 Visio 工作 然后在我选择的文档中打开一个页面 谢谢 Dim FName As String Dim VsApp As Object On Error Resume Next Set VsA
  • 为什么使用 if(!$scope.$$phase) $scope.$apply() 是反模式?

    有时我需要使用 scope apply在我的代码中 有时它会抛出 摘要已在进行中 错误 所以我开始寻找解决这个问题的方法并发现了这个问题 AngularJS 调用 scope apply 时防止错误 digest已经在进行中 然而在评论中
  • PyDev 中经典的垂直滚动条在哪里?

    我刚刚更新了 Eclipse 与 PyDev 一起使用 令人惊讶地发现经典的垂直滚动条变成了一些奇怪的东西 如图 屏幕截图 上标记的那样 Eclipse 标准 SDK 版本 开普勒服务版本 2 内部版本号 20140224 0627 我想问
  • 在 Java 中迭代数组的最快方法:循环变量与增强的 for 语句[重复]

    这个问题在这里已经有答案了 在Java中 以老式的方式迭代数组是否更快 for int i 0 i lt a length i f a i 或者使用更简洁的形式 for Foo foo a f foo 对于ArrayList 答案是一样的吗
  • LNK2019:rapidjson 出现“无法解析的外部符号”

    我有一个 Visual C 项目 其中添加了rapidjson 库 经过测试可以正常工作 但是当我添加一个rapidjson Document嵌套类的类型抛出一个LNK2019当我尝试编译时出错 该项目是一个创建DLL的动态库 这是我的定义
  • 在 SQL 中创建临时表

    我正在尝试创建一个临时表 仅选择特定的数据register type 我写了这个查询 但它不起作用 CREATE TABLE temp1 Select egauge dataid egauge register type egauge ti
  • 将列表从 Servlet 传递到 JSP

    当我尝试将 Servlet 中的列表的值设置为会话变量并像 JSP 一样访问它时 doGet HttpSession session request getSession true session setAttribute MySessio
  • 如何查看 Maven 在部署期间发送到服务器的内容?

    我正在尝试使用 Github 的新 Actions CI 服务器将包部署到 Github 的新包功能 进展不顺利 我认为一切都设置正确 但我收到此错误 Failed to execute goal org apache maven plug
  • Unpivot SQL 事物

    我有一些数据 例如 Chocolate Strawberies Oranges 2 3 1 4 2 4 我如何得到回来 Chocolate 2 Chocolate 4 Strawberies 3 Strawberies 2 Oranges
  • 动态 Linq + 实体框架:动态选择的日期时间修改

    我正在尝试找到一种方法 在进行 sql 分组之前将 UTC 时间移至本地 我正在使用 System Linq Dynamic 在这里管理https github com kahanu System Linq Dynamic 它非常适合进行动
  • Galaxy Nexus 上的 Toast 大小

    当我在应用程序中使用 toast 时 尺寸非常非常小 但当另一个应用程序显示吐司时 大小是正常的 如高级任务杀手 或短信 我需要做什么才能得到正常大小的吐司 我有 Galaxy Nexus ICS 4 0 1 我的应用程序使用 SDK AP
  • 获取状态 -1 而不是 401 Angularjs

    我正在尝试从服务器获取响应 该函数看起来是这样的 function getOverview var req method GET url base headers authorization Bearer GottenTokens getS
  • 将 MySQL 数据与易用性解耦

    假设一个简单的酒店预订数据库包含三个表 表 1 预订该表包含入住和退房日期以及一间或多间客房的参考信息和优惠券 如果适用 表 2 房间该表包含所有酒店房间的数据 包括每晚的价格和床位数量 表 3 优惠券该表保存了所有优惠券的数据 选项1 如
  • 如何避免“if”链?

    假设我有这个伪代码 bool conditionA executeStepA if conditionA bool conditionB executeStepB if conditionB bool conditionC executeS
  • Android静默更新apk,然后重新启动应用程序

    好吧 首先我想澄清一下 我并不是想达到任何可疑的目的 我们有自己的企业应用程序 仅适用于我们自己的硬件 我们不使用 Google Play 商店 手机也已root 我已经实现了我们自己的Apk更新机制 到目前为止 我已经使用下面的代码成功地