Java 非交互式、非网络化Android设备的升级机制

Java 非交互式、非网络化Android设备的升级机制,java,android,apk,updates,silent-installer,Java,Android,Apk,Updates,Silent Installer,我一直在研究静默安装有一段时间了 我目前正试图找到一些方法,在使用Android的设备上安装更新: 没有用户输入的方法 没有互联网或网络 正在运行安卓4.0 这就是为什么我希望默默地去做。最糟糕的情况是每次我想更新的时候都把它连接到电脑上,但这正是我想要避免的 我的想法是,我对这个设备的唯一输入是我的SD卡 我需要能够做的是不断地在SD卡上查找文件;如果有,我会在没有任何用户输入(apk或建议的文件类型)的情况下更新设备上的软件 从目前为止我所发现的情况来看,有两种方法显然会起作用: 根

我一直在研究静默安装有一段时间了

我目前正试图找到一些方法,在使用Android的设备上安装更新:

  • 没有用户输入的方法
  • 没有互联网或网络
  • 正在运行安卓4.0
这就是为什么我希望默默地去做。最糟糕的情况是每次我想更新的时候都把它连接到电脑上,但这正是我想要避免的

我的想法是,我对这个设备的唯一输入是我的SD卡

我需要能够做的是不断地在SD卡上查找文件;如果有,我会在没有任何用户输入(apk或建议的文件类型)的情况下更新设备上的软件

从目前为止我所发现的情况来看,有两种方法显然会起作用:

  • 根和假装我是一个亚行程序
  • 网络上的appbrain(对我来说没用)
  • 编写/重写操作系统(超出我的专业知识)
然而,我更希望在我能从比我了解更多的人那里得到一些反馈之前,不必为设备设置根目录

因此,我的问题如下:

  • 有人能告诉我这些方法中的一种是否适用于我的案例吗?(80%的机会就可以了)
  • 有没有其他我在搜索中遗漏的方式可以被别人指出

您可以使用Packagemanager命令和提示符来执行此操作

例如:

su -c pm install <apk>
su-cpm安装
从应用程序中,您可以:

Process p = Runtime.getRuntime().exec("su -c pm install " + <your apk>);

processp=Runtime.getRuntime().exec(“su-cpm安装”+);
注意:

  • 如果希望以静默方式安装,则至少应具有shell root访问权限
  • 如果您没有shell root访问权限,则会向用户显示一个弹出窗口
更新 对不起我的无知,但我想根是你唯一的选择。
这些牵强的想法似乎可行,但由于我自己没有这样做,我不知道。

这显然不起作用,因为pm将在应用程序的受限权限下运行。正如chris刚才所说,这将不起作用。你是否认为pm已经被完全重写了?这篇文章试图尽可能地平静下来,这样答案就会以同样的形式出现。还有,你的答案是针对文章的哪些部分?另外,你在这里还假设它已经是chmod 777我的程序吗??(感谢您的输入)如果有一个可供非root用户使用的su可执行文件,它接受一个命令作为参数执行,那么这种修改后的形式可能会达到它的目的。在许多设备上,这两个问题的任何一部分都可能是不真实的。对于任何想要答案的人,我已经在这里回答了,嗯,关闭了吗?你能告诉我为什么你决定结束我的问题吗?如果有人告诉我我显然没有包括或过度包括的内容,我可以编辑它。正如我所说,我是编程新手,如果你看看我的站姿,你会发现这是我的第一篇帖子!指针会很好,或者如果有人能重新打开并告诉我我需要改变什么,那将很好,可能会关闭,因为对于这里的大多数人来说,这是一个太难理解如何处理的问题。你可以做一些类似于触发SD卡插入的事情,有目的地,pm安装你在那里找到的东西(假设是root),但一个棘手的部分是,你真的应该在弹出SD卡之前卸载SD卡,所以你需要强制它,然后发出一些噪音或闪烁一盏灯,告诉用户可以移除。或者,假设您将在再次使用sd卡之前重新格式化sd卡,那么您就有可能损坏sd卡。更干净的方法可能是将恢复系统设置为读取更新。关闭sd卡,并安装一个检测sd卡插入并重新启动恢复的应用程序。对于没有网络的自定义设备,可以允许重新启动setuid。。。作为通用“su”黑客的替代方案。你可以要求在update.zip.AIED上签名。安装任何东西都需要用户确认-这实际上与将浏览器或文件管理器指向刚刚编译的apk.Hay chris一样,所以我更可能使用usb棒。这样做的目的是让任何人都能轻松使用(为他们提供新的更新,让他们可以使用U盘)。与其说担心这会导致腐败,不如说:一些安装是为了粘贴,这将擦除apk并用新的apk替换apk。此外,我将有一个程序周期在后台,以确定何时输入usb和检查新的更新版本(可能通过名称或简单的数字)。