程序化安装新版Android应用程序

3
故事背景 我正在开展一个项目,其中一款Android应用程序在自定义设备上运行,但此应用程序未通过Play Store安装,而是手动上传、安装和启动APK文件到设备上。 问题 问题在于当发布新版本时,我们必须手动更新所有设备上的应用程序。
我们想要自动化这个过程并构建如下流程:
  • 安装应用程序
  • 启动应用程序
  • 启动后台进程以检查服务器上是否有新版本
  • 下载新的APK文件
  • 卸载当前应用程序/更新应用程序
  • 安装新应用程序/更新应用程序
问题:

我们可以使用程序卸载和安装APK文件吗?

我们应该使用现有的应用程序来处理此工作,还是创建一个新的Android应用程序来处理新版本的检查和应用程序的后台更新?

3个回答

1

不要卸载APK,将更新的APK文件放在您的服务器上,在应用程序中下载该文件。

使用以下函数安装应用程序

fun install(context: Context, packageName: String, apkPath: String) {

// PackageManager provides an instance of PackageInstaller
val packageInstaller = context.packageManager.packageInstaller

// Prepare params for installing one APK file with MODE_FULL_INSTALL
// We could use MODE_INHERIT_EXISTING to install multiple split APKs
val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
params.setAppPackageName(packageName)

// Get a PackageInstaller.Session for performing the actual update
val sessionId = packageInstaller.createSession(params)
val session = packageInstaller.openSession(sessionId)

// Copy APK file bytes into OutputStream provided by install Session
val out = session.openWrite(packageName, 0, -1)
val fis = File(apkPath).inputStream()
fis.copyTo(out)
session.fsync(out)
out.close()

// The app gets killed after installation session commit
session.commit(PendingIntent.getBroadcast(context, sessionId,
        Intent("android.intent.action.MAIN"), 0).intentSender)
}

重新启动应用程序以完成更新。
class UpdateReceiver : BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {

    // Restart your app here
    val i = Intent(context, MainActivity::class.java)
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    context.startActivity(i)        
}
}

下面的链接描述了在后台静默更新应用程序的完整过程。

https://www.sisik.eu/blog/android/dev-admin/update-app


你测试过这个在Android 10上的兼容性吗? - undefined

0

一个自动化的ADB脚本可能会起作用,也许可以与Python脚本配对使用?你需要触发APK的侧载,然后在完成后卸载。


-2

你无法从设备本身自动以编程方式安装APK。

  • 如果设备已经root,你可以使用shell脚本和pm命令来自动化这个过程
  • 你可以在所有设备上启用USB调试,并编写一个adb脚本来使用计算机安装apk
  • 你可以有另一个应用程序,它只检查新的APK并下载并启动一个意图来安装APK(Oreo及以上需要明确的权限),然后让用户点击安装按钮

然而,你走错了方向,因为上述所有方法都非常繁琐。 因为PlayStore恰好符合你指定的要求。我强烈建议你在Playstore上发布。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接