以编程方式安装新版本的Android应用程序
故事 现在我正在做一个项目,一个Android应用程序正在一个定制设备上运行,这个应用程序不是通过Play Store安装的,但是APK文件是手动上传、安装并在设备上启动的 问题在于,当新版本发布时,我们必须在所有设备上手动更新应用程序 我们希望将此过程自动化,并构建如下过程:以编程方式安装新版本的Android应用程序,android,performance,apk,android-install-apk,android-update-app,Android,Performance,Apk,Android Install Apk,Android Update App,故事 现在我正在做一个项目,一个Android应用程序正在一个定制设备上运行,这个应用程序不是通过Play Store安装的,但是APK文件是手动上传、安装并在设备上启动的 问题在于,当新版本发布时,我们必须在所有设备上手动更新应用程序 我们希望将此过程自动化,并构建如下过程: 安装应用程序 启动应用程序 启动后台进程,以便在服务器中检查新版本 下载新的APK文件 卸载当前应用程序/更新应用程序 安装新应用程序/更新应用程序 问题: 我们能否以编程方式卸载和安装APK文件 Shell我们使用
- 安装应用程序
- 启动应用程序
- 启动后台进程,以便在服务器中检查新版本
- 下载新的APK文件
- 卸载当前应用程序/更新应用程序
- 安装新应用程序/更新应用程序
Shell我们使用现有的应用程序来完成这项工作,或者创建一个新的android应用程序来处理新版本检查并在后台更新应用程序?一个自动化的ADB脚本可以工作,也许可以与Python脚本配对?您需要触发APK的侧向加载,然后在完成后卸载,而不是卸载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)
}
}
下面的链接描述了在后台静默更新应用程序的完整过程
您无法通过编程从设备本身自动安装APK
- 如果设备使用shell脚本和
命令根目录,则可以自动执行该过程pm
- 您可以在所有设备上启用
,并编写adb脚本以使用计算机安装apkUSB调试
- 您可以使用另一个应用程序,只需检查新的APK,下载并启动安装APK的意图(Oreo及以上版本需要明确的权限),然后让用户点击
按钮安装
因为PlayStore完全满足您指定的要求。我强烈建议您在Playstore上发布。您是否对Android 10进行过测试?