在没有提示的情况下安装Android APK

在没有提示的情况下安装Android APK,android,installation,root,Android,Installation,Root,我们正在编写一个Android应用程序,在大屏幕上显示广告。 我们有一个后端,广告商可以选择的广告,所以他们几乎立即更新。 因为会有很多Android设备在运行(插入HDMI屏幕),我们应该能够远程更新我们的软件 情况就是这样: 主应用程序持续运行(除非关闭),用户从未看到任何与Android相关的内容。 我们需要一个更新程序应用程序,监听更新并删除主apk,安装一个新的apk。 更新时,我们将显示一个带有“更新,请稍候”的活动,直到安装并显示新的主apk 我们需要什么: 我们需要关于如何在不提

我们正在编写一个Android应用程序,在大屏幕上显示广告。 我们有一个后端,广告商可以选择的广告,所以他们几乎立即更新。 因为会有很多Android设备在运行(插入HDMI屏幕),我们应该能够远程更新我们的软件

情况就是这样:

主应用程序持续运行(除非关闭),用户从未看到任何与Android相关的内容。 我们需要一个更新程序应用程序,监听更新并删除主apk,安装一个新的apk。 更新时,我们将显示一个带有“更新,请稍候”的活动,直到安装并显示新的主apk

我们需要什么:

我们需要关于如何在不提示根设备上的用户的情况下实现更新机制的帮助

我们拥有的:

updater应用程序连接到boot received事件中,服务在该事件中启动(此服务将侦听更新,这将很快由同事实现)。 服务可以启动一个活动,在更新时提示更新信息

在更新程序活动中

 try {
            Process proc = Runtime.getRuntime().exec(new String[]{"su", "pm install -r /mnt/sdcard/MYFOLDER/testAPK.apk"});
            stringBuilder.append(String.valueOf(proc.waitFor()));
            stringBuilder.append("\n");
        } catch (Exception e) {
            if (e instanceof IOException) {
                Log.d(TAG, "IOException");
            } else if (e instanceof InterruptedException) {
                Log.d(TAG, "InterruptedException");
            } else {
                e.printStackTrace();
            }
        }
StringBuilder打印11,但如果我给出随机的unexisting命令,它也会打印11

在清单中

<!-- Permission to start UpdaterService on boot -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<!-- Install/delete permissions, only granted to system apps -->
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

如果我没有将我的应用程序作为系统应用程序安装,安装包和删除包都是无用的,对吗

长话短说,没有安装我的测试APK,我不知道如何解决这个问题。
任何帮助都将不胜感激

您只需使用adb install命令以静默方式安装/更新APK即可。下面是示例代码

public static void InstallAPK(String filename){
    File file = new File(filename); 
    if(file.exists()){
        try {   
            String command;
            command = "adb install -r " + filename;
            Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
            proc.waitFor();
        } catch (Exception e) {
        e.printStackTrace();
        }
     }
  }

请查收

如果您确实具有root访问权限,请将更新程序应用程序置于/system/app/中,您将获得安装包和删除包许可证哪里有StringUtil类?它可以工作,我使用了“pm安装”而不是“adb安装”!谢谢需要根设备!su命令需要有根设备,但在生产构建平板电脑时,我如何实现这一过程?@Palak嘿,我可以与您确认一下,成功安装后,我如何访问apk的版本号?此外,我如何知道是否已安装最新的apk,以便应用程序执行升级?
public void InstallAPK(String filename){

    Process process = Runtime.getRuntime().exec("su");
    OutputStream out = process.getOutputStream();
    String reinstall = "pm install -r " + filename + "\n";
    String am = "am start -a android.intent.action.MAIN -n yourPackage/.MainActivity";
    String cmd = reinstall + am + " &";
    out.write(cmd.getBytes());
    out.flush();
    out.close();
    process.waitFor();

}