谁了解升级apk的静默安装?

中才德创 2016-01-15 09:33:42
程序是个主lancher,静默安装来实现升级,实际过程经常黑屏。升级断断续续,反反复复。有时断电重开机,又实际升级上去了。
代码是这么写的:
String cmd = "pm install -r " + ApkFilePath;
Runtime.getRuntime().exec(cmd);

或者
String cmd = "pm install -r -d " + ApkFilePath;
Runtime.getRuntime().exec(cmd);

...全文
237 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
中才德创 2016-01-29
  • 打赏
  • 举报
回复
设计了规避方案,每次升级过APK,就系统写个记录在偏好里。下次程序启动时,发现此设置项,改写并重启一下系统。 经过测试,OK。 log很重要,细节很重要! //参考代码如下:
//for update
@DefaultBoolean(value = false)
boolean isUpdate();

/**
 * get update
 */
public Boolean getPrefUpdate() {
	return avcPrefs.isUpdate().get();
}

/**
 * set update
 */
public void setPrefUpdate(boolean bUpdate) {
	avcPrefs.isUpdate().put(bUpdate);
}

/**
 * install apk thread
 */
private class installApkThread extends Thread {
	@Override
	public void run() {
		if ((downLoadStorageFileDir!=null) && (apkName!=null)) {
			String filePath = downLoadStorageFileDir + File.separatorChar + apkName;
			AvcLog.printW(TAG, "start install apk : " + filePath);
			AvcApp.the().getCore().setPrefUpdate(true);
			int iRet = installSlientEx(filePath);
			AvcLog.printW(TAG, "finish install apk : the result is " + iRet);
		} else {
			AvcLog.printW(TAG, "installApkThread : path is null");
		}
    }
};

private void initData() {
	Boolean bUpdate = avcCore.getPrefUpdate();
	if (bUpdate) {
		avcCore.setPrefUpdate(false);
		AvcLog.printW(TAG, "Has do a update, reboot...");
		avcCore.onReboot();
	}
}
中才德创 2016-01-29
  • 打赏
  • 举报
回复
日志上分析,系统在启动时,调用了早期版本的so库,导致NDK的函数参数发生错误!附日志信息:

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧