Android 静默 apk 更新

2023-12-09

我希望在我的应用程序中进行静默更新,无需任何用户交互。 但我总是收到错误代码 139。 硬件已root! 有人可以帮忙吗?

这是代码:

public class UpdateAPK extends Activity {

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.updateapk);
    if (isRooted() == true) {
        Toast.makeText(UpdateAPK.this, "Hardware is rooted", Toast.LENGTH_LONG).show();
        try {
            Process install = Runtime.getRuntime().exec(new String[] {"su", "-c", "pm install -r /mnt/sdcard/app.apk"});
            install.waitFor();
            if (install.exitValue() == 0) {
                // Success :)
                Toast.makeText(UpdateAPK.this, "Success!", Toast.LENGTH_LONG).show();
            } else {
                // Fail
                Toast.makeText(UpdateAPK.this, "Failure. Exit code: " + String.valueOf(install.exitValue()), Toast.LENGTH_LONG).show();
            }
        } catch (IOException e) {
            System.out.println(e.toString());
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } else {

        //Do soemthing else

    }
}

谢谢你!


我会避免对整个 SD 卡路径进行硬编码。尝试这样的事情:

String filePath = Environment.getExternalStorageDirectory().toString() + "/your_app_directory/your_app_filename.apk";
Process installProcess = null;
int installResult = -666;

try
{
    installProcess = Runtime.getRuntime().exec("su -c pm install -r " + filePath);
}
catch (IOException e)
{
    // Handle IOException the way you like.
}

if (installProcess != null)
{
    try
    {
        installResult = installProcess.waitFor();
    }
    catch(InterruptedException e)
    {
        // Handle InterruptedException the way you like.
    }
}

if (installResult == 0)
{
    // Success!
}
else
{
    // Failure. :-/
}

另外,请注意权限...您可以添加:

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

Android 静默 apk 更新 的相关文章

随机推荐

  • 将 ASP.NET 从版本 1.1 升级到 2.0 - 有任何问题吗?

    我知道我们是really这里落后于时代 但我们即将从 NET 1 1 升级到 NET 2 0 谢谢你的同情 无论如何 有什么我们应该注意的问题吗 在我们开始之前 您有什么一般性建议吗 请不要发帖告诉我直接升级到 3 5 我们只能使用 2 0
  • Flutter - 无法使用灵活的内部填充进行文本换行

    在我的 flutter 应用程序中 我想要一张卡片和四个盒子水平对齐 其内部的宽度和高度相等 代码如下 override Widget build BuildContext context return MaterialApp home S
  • 返回 MS Access 中每组的增量组编号

    我需要帮助在 Access 中创建一个查询 以递增地对行组进行编号 在公共日期进行分组 并在下一个日期保留 组编号 增量 如 结果 列中显示的那样 日期 ID 结果 2017 01 09 809 1 2017 01 09 810 1 201
  • 复杂表合并 javascript 和 jquery 算法

    我有一个相当独特的问题 无法解决 我有一张 2 x 3 的桌子 排列如下图所示 1 2 1 像这样 http jsfiddle net 4zGvg 适用于任意行 列 想法 我们有values矩阵和span矩阵 的价值观span are 0
  • 是否有适用于 .NET(C# 或 VB.NET)的 UPnP 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在开发一个 P2P 应用程序 我需要让它使用 UPnP 通过 NAT 路由器 防火墙进行通信 但是 NET Framework 似乎不包含对 U
  • strftime() 函数显示不正确的时间

    The strftime php 中的函数在我的系统上没有显示正确的时间 我在 xampp 上运行 php 我的电脑时钟大约是 11 点 但功能strftime 当我执行以下代码时返回 19 echo Time is strftime H
  • 释放 Solaris/Linux 中分配的内存

    我编写了一个小程序 并在 Solaris Linux 平台下编译它 以测量将此代码应用于我的应用程序的性能 该程序是这样编写的 最初使用sbrk 0 系统调用 我已经获取了堆区域的基地址 之后我使用分配了 1 5 GB 内存malloc系统
  • R dplyr:使用字符串函数重命名变量

    有点相关的问题 在 dplyr 的重命名函数中以字符串形式输入新列名称 在中间一个dplyr chain gt 我想用旧名称的函数替换多个列名称 使用tolower or gsub etc library tidyr library dpl
  • 在 twilio 中发送短信返回 21603:需要“发件人”号码

    这是一个常规资金帐户 它将坚持没有发件人号码 我也尝试作为请求参数而不是请求正文 SID和TOKEN是正确的 通过修改它们进行测试并获得适当的错误 与 twilio 库配合良好 而不是作为独立的 POST POST 2010 04 01 A
  • Visual Studio Winform 设计器:在当前控件 BindingSource 上设置 DataBindings

    我正在使用 Visual Studio 2013 设计器在 Winforms 中创建 UserControl 它包含一个文本框 我添加了一个 BindingSource 其 DataSource 属性在代码中设置为列表 当我单击文本框时 查
  • 快速写入文件(iOS)

    如何在 Swift 中写入 xml 文档 我有这个代码 let content
  • Python记录器:不会覆盖原始日志?

    因此 当我将以下 x 次复制粘贴到 python 提示符时 它将日志 x 次添加到指定文件的末尾 如何更改代码 以便每次我将其复制粘贴到提示符中时 我只是覆盖现有文件 代码似乎不接受mode w 选项或者我似乎不明白它的含义 def Min
  • 在javascript中设置新窗口的回调函数

    有没有一种简单的方法可以为在 javascript 中打开的新窗口设置 回调 函数 我想从新窗口运行父级的函数 但我希望父级能够设置此特定函数的名称 因此不应在新窗口页面中对其进行硬编码 例如在父级中我有 function DoSometh
  • 将“MediaPlayPause”键发送到应用程序而不将焦点设置到该应用程序

    我正在创建一个程序 它将发送媒体键输入 例如MediaPlayPause MediaNextTrack等 到我有的应用程序IntPtr的 有点像虚拟遥控器 所以经过研究我发现this which almost准确地告诉我如何解决我的问题 然
  • 如何使用 Xpath 获取纯文本

    你好 我得到了这段 html 我想从中获取文本元素 span class h1 Toltec Lighting 216 BRZ 508 Leaf Collection Traditional Potrack With Italian Mar
  • 将 IEEE 浮点十六进制转换为十进制?

    如果我有一个 IEEE 浮点十六进制 42F6E979 如何将其转换为十进制 我相信十进制表示是 123 456001 大多数 汇编语言实际上并没有非常严格地强制执行类型 因此您只需使用该值初始化一个位置 然后将其视为 使用浮点数 最简单的
  • Djs 交互与嵌入分开发送附件

    我试图让我的消息看起来像this 但由于interaction reply I get this反而 这是我的代码 fs readdir pics error files gt if error return console log err
  • 在视频播放时调整/缩小 YouTubePlayerFragment 的大小

    我正在尝试在 Youtube 应用程序中复制视频最小化 如图所示here 为了实现这一目标 我尝试使用可拖动面板图书馆 当我运行示例时 我注意到视频在播放过程中最小化时不会缩放 而是会裁剪 当视频停止 不是暂停 并显示缩略图时 视图会按预期
  • 如何克服Excel中公式的最大长度限制? excel的一个bug?

    Excel 中至少有两种形式的公式 一个用于单元格 另一个用于数据验证 进行数据验证的公式的最大长度限制约为 210 个字符 这是我试图解决的一个问题 给定一个包含类别和值的数据集 category value1 value2 a 1 0
  • Android 静默 apk 更新

    我希望在我的应用程序中进行静默更新 无需任何用户交互 但我总是收到错误代码 139 硬件已root 有人可以帮忙吗 这是代码 public class UpdateAPK extends Activity protected void on