[2.15.0][增量升级] 优化下载过程中的逻辑
This commit is contained in:
@@ -60,11 +60,7 @@ class UpgradeAppNetWorkManager private constructor() {
|
||||
provider?.recordUpgradeRecord(sn ?: "", macAddress, type, FunctionBuildConfig.isSupportPatchUpgrade)
|
||||
provider?.recordUpgradeRequestStart()
|
||||
val info = mUpgradeApiService.getUpgradeInfo(requestBody)
|
||||
if (info != null) {
|
||||
SharedPrefsMgr.getInstance(context!!).putString(SharedPrefsConstants.APP_UPGRADE_CONTENT, if (info.result != null) GsonUtils.toJson(info) + "--mac:$macAddress --type:$type --sn:$sn --versionName:$versionName" else "info.result == null --mac:$macAddress --type:$type --sn:$sn --versionName:$versionName")
|
||||
} else {
|
||||
SharedPrefsMgr.getInstance(context!!).putString(SharedPrefsConstants.APP_UPGRADE_CONTENT, "info == null --mac:$macAddress --type:$type --sn:$sn --versionName:$versionName")
|
||||
}
|
||||
SharedPrefsMgr.getInstance(context).putString(SharedPrefsConstants.APP_UPGRADE_CONTENT, if (info.result != null) GsonUtils.toJson(info) + "--mac:$macAddress --type:$type --sn:$sn --versionName:$versionName" else "info.result == null --mac:$macAddress --type:$type --sn:$sn --versionName:$versionName")
|
||||
if (info.result != null) {
|
||||
provider?.recordUpgradeRequestSuccess(GsonUtils.toJson(info))
|
||||
doUpgrade(info)
|
||||
@@ -73,7 +69,7 @@ class UpgradeAppNetWorkManager private constructor() {
|
||||
}
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
SharedPrefsMgr.getInstance(context!!).putString(SharedPrefsConstants.APP_UPGRADE_CONTENT,
|
||||
SharedPrefsMgr.getInstance(context).putString(SharedPrefsConstants.APP_UPGRADE_CONTENT,
|
||||
"$t--mac:$macAddress --type:$type --sn:$sn "
|
||||
)
|
||||
provider?.recordUpgradeRequestFailed(t.message ?: "更新接口请求失败")
|
||||
@@ -118,6 +114,7 @@ class UpgradeAppNetWorkManager private constructor() {
|
||||
}
|
||||
}
|
||||
if (isGoFullUpgrade) {
|
||||
Log.d("ApkInstaller", "走全量升级 --- 1 ----")
|
||||
provider?.recordUpgradeRecord(info.result.versionName, null, 0)
|
||||
}
|
||||
withContext(Dispatchers.Main) {
|
||||
|
||||
@@ -41,14 +41,14 @@ class UpgradeManager : IDownload {
|
||||
}
|
||||
}
|
||||
|
||||
private var map: Map<String, String>? = null
|
||||
|
||||
private val upgradeProvider: IMoGoUpgradeProvider? by lazy { CallerBase.getApiInstance(IMoGoUpgradeProvider::class.java, MogoServicePaths.PATH_UPGRADE_TYPE_API) }
|
||||
|
||||
private val types by lazy { ConcurrentHashMap<String, DownloadType>() }
|
||||
|
||||
|
||||
fun upgradeProvider(): IMoGoUpgradeProvider? = upgradeProvider
|
||||
internal fun upgradeProvider(): IMoGoUpgradeProvider? = upgradeProvider
|
||||
|
||||
private val scope by lazy { CoroutineScope(Dispatchers.IO + SupervisorJob()) }
|
||||
|
||||
|
||||
fun downLoadPackage(context: Context, type: DownloadType, downloadKey: String, downloadUrl: String) {
|
||||
@@ -67,16 +67,10 @@ class UpgradeManager : IDownload {
|
||||
override fun onStart(downloadUrl: String?) {
|
||||
CallerLogger.d("$M_DEVA$TAG","onStart downloadUrl : $downloadUrl")
|
||||
if (downloadUrl != null) {
|
||||
if (map.isNullOrEmpty()) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeStart(downloadUrl)
|
||||
} else {
|
||||
findKey(downloadUrl) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeStart(it)
|
||||
}
|
||||
}
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeStart(downloadUrl)
|
||||
val type = types[downloadUrl]
|
||||
if (type == PATCH || type == APK) {
|
||||
runBlocking {
|
||||
scope.launch {
|
||||
CallerDevaToolsManager.upgradeProvider()?.recordDownloadStart(downloadUrl)
|
||||
}
|
||||
}
|
||||
@@ -86,11 +80,11 @@ class UpgradeManager : IDownload {
|
||||
override fun onPause(downloadUrl: String?, threadBean: ThreadBean?) {
|
||||
CallerLogger.d("$M_DEVA$TAG","onPause downloadUrl : $downloadUrl , threadBean : $threadBean")
|
||||
if (downloadUrl != null) {
|
||||
if (map.isNullOrEmpty()) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradePause(downloadUrl)
|
||||
} else {
|
||||
findKey(downloadUrl) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradePause(it)
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradePause(downloadUrl)
|
||||
val type = types[downloadUrl]
|
||||
if (type == PATCH || type == APK) {
|
||||
scope.launch {
|
||||
CallerDevaToolsManager.upgradeProvider()?.recordDownloadPause(downloadUrl)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,23 +93,22 @@ class UpgradeManager : IDownload {
|
||||
override fun onProgress(downloadUrl: String?, length: Int) {
|
||||
CallerLogger.d("$M_DEVA$TAG"," onProgress downloadUrl : $downloadUrl , length : $length")
|
||||
if (downloadUrl != null) {
|
||||
if (map.isNullOrEmpty()) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeProgress(downloadUrl, length)
|
||||
} else {
|
||||
findKey(downloadUrl) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeProgress(downloadUrl, length)
|
||||
}
|
||||
}
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeProgress(downloadUrl, length)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFinished(downloadUrl: String?, threadBean: ThreadBean?, localPath: String) {
|
||||
if (downloadUrl != null) {
|
||||
if (downloadUrl == null) {
|
||||
return
|
||||
}
|
||||
doOnFinished(downloadUrl, localPath)
|
||||
}
|
||||
|
||||
private fun doOnFinished(downloadUrl: String, localPath: String) {
|
||||
scope.launch {
|
||||
val type = types[downloadUrl]
|
||||
if (type == APK || type == PATCH) {
|
||||
runBlocking {
|
||||
upgradeProvider?.recordDownloadSuccess(downloadUrl)
|
||||
}
|
||||
upgradeProvider?.recordDownloadSuccess(downloadUrl)
|
||||
val patchInfo = CallerPatchManager.getPatchInfoByUrl(downloadUrl)
|
||||
if (patchInfo != null) {
|
||||
var isPatchInstallFailed = false
|
||||
@@ -141,49 +134,41 @@ class UpgradeManager : IDownload {
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
runBlocking {
|
||||
upgradeProvider?.recordInstallApplyPatchStart()
|
||||
}
|
||||
upgradeProvider?.recordInstallApplyPatchStart()
|
||||
var ret = CallerPatchManager.applyPatch(Utils.getApp(), patch, newApk)
|
||||
if (!ret) {
|
||||
runBlocking {
|
||||
upgradeProvider?.recordInstallApplyPatchFailed("合成patch失败")
|
||||
}
|
||||
upgradeProvider?.recordInstallApplyPatchFailed("合成patch失败")
|
||||
Logger.w(TAG, "合成patch失败...")
|
||||
throw AssertionError("合成patch失败...")
|
||||
} else {
|
||||
runBlocking {
|
||||
upgradeProvider?.recordInstallApplyPatchSuccess()
|
||||
upgradeProvider?.recordTargetMd5CheckStart()
|
||||
}
|
||||
upgradeProvider?.recordInstallApplyPatchSuccess()
|
||||
upgradeProvider?.recordTargetMd5CheckStart()
|
||||
ret = CallerPatchManager.checkMd5ForMergedApk(Utils.getApp(), newApk, patchInfo.targetMd5)
|
||||
if (!ret) {
|
||||
runBlocking {
|
||||
upgradeProvider?.recordTargetMd5CheckFailed("合成后的apk的md5与服务端上的目标版本的md5不一致:[server_target_md5: ${patchInfo.targetMd5}, merged_md5: ${Md5Util.getMd5FromFile(newApk)}]")
|
||||
}
|
||||
upgradeProvider?.recordTargetMd5CheckFailed("合成后的apk的md5与服务端上的目标版本的md5不一致:[server_target_md5: ${patchInfo.targetMd5}, merged_md5: ${Md5Util.getMd5FromFile(newApk)}]")
|
||||
Logger.w(TAG, "md5校验失败...")
|
||||
throw AssertionError("md5校验失败:[target:${patchInfo.targetMd5}]")
|
||||
} else {
|
||||
Logger.w(TAG, "md5校验成功...")
|
||||
runBlocking {
|
||||
upgradeProvider?.recordTargetMd5CheckSuccess()
|
||||
upgradeProvider?.recordInstallStart()
|
||||
}
|
||||
ApkInstaller.installApp(Utils.getApp(), newApk) { code, reason ->
|
||||
if (code != PackageInstaller.STATUS_SUCCESS) {
|
||||
upgradeProvider?.also {
|
||||
try {
|
||||
newApk.delete()
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
try {
|
||||
patch.delete()
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
runBlocking {
|
||||
it.recordInstallFailed(code, reason)
|
||||
upgradeProvider?.recordTargetMd5CheckSuccess()
|
||||
upgradeProvider?.recordInstallStart()
|
||||
withContext(Dispatchers.Main) {
|
||||
ApkInstaller.installApp(Utils.getApp(), newApk) { code, reason ->
|
||||
if (code != PackageInstaller.STATUS_SUCCESS) {
|
||||
upgradeProvider?.also {
|
||||
try {
|
||||
newApk.delete()
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
try {
|
||||
patch.delete()
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
scope.launch {
|
||||
it.recordInstallFailed(code, reason)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -202,65 +187,37 @@ class UpgradeManager : IDownload {
|
||||
}
|
||||
|
||||
if (isPatchInstallFailed) {
|
||||
runBlocking {
|
||||
CallerDevaToolsManager.upgradeProvider()?.recordInstallFailed(ApkInstaller.INSTALL_CODE_INVALID, patchInstallFailedReason)
|
||||
}
|
||||
upgradeProvider?.recordInstallFailed(ApkInstaller.INSTALL_CODE_INVALID, patchInstallFailedReason)
|
||||
}
|
||||
} else {
|
||||
val apk = File(localPath)
|
||||
ApkInstaller.installApp(Utils.getApp(), apk) { code, reason ->
|
||||
if (code != PackageInstaller.STATUS_SUCCESS) {
|
||||
upgradeProvider?.also { itx ->
|
||||
try {
|
||||
apk.delete()
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
runBlocking {
|
||||
itx.recordInstallFailed(code, reason)
|
||||
withContext(Dispatchers.Main) {
|
||||
ApkInstaller.installApp(Utils.getApp(), apk) { code, reason ->
|
||||
if (code != PackageInstaller.STATUS_SUCCESS) {
|
||||
upgradeProvider?.also { itx ->
|
||||
try {
|
||||
apk.delete()
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
scope.launch { itx.recordInstallFailed(code, reason) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (downloadUrl != null) {
|
||||
if (map.isNullOrEmpty()) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeFinish(downloadUrl, localPath)
|
||||
} else {
|
||||
findKey(downloadUrl) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeFinish(it, localPath)
|
||||
}
|
||||
}
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeFinish(downloadUrl, localPath)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(downloadUrl: String?, errorMsg: String?) {
|
||||
CallerLogger.d("$M_DEVA$TAG","onError downloadUrl : $downloadUrl , errorMsg : $errorMsg")
|
||||
if (downloadUrl != null) {
|
||||
if (map.isNullOrEmpty()) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeError(downloadUrl, errorMsg ?: "未知错误")
|
||||
} else {
|
||||
findKey(downloadUrl) {
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeError(it, errorMsg ?: "未知错误")
|
||||
}
|
||||
}
|
||||
CallerDevaToolsUpgradeListenerManager.invokeUpgradeError(downloadUrl, errorMsg ?: "未知错误")
|
||||
val type = types[downloadUrl]
|
||||
if (type == APK || type == PATCH) {
|
||||
runBlocking {
|
||||
CallerDevaToolsManager.upgradeProvider()?.recordDownloadFailed(downloadUrl,errorMsg ?: "下载失败")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun findKey(downloadUrl: String?, findResult: (downloadUrl: String) -> Unit) {
|
||||
downloadUrl?.let { url ->
|
||||
map?.iterator()?.forEach {
|
||||
if (it.value == url) {
|
||||
findResult.invoke(it.key)
|
||||
}
|
||||
scope.launch { upgradeProvider?.recordDownloadFailed(downloadUrl,errorMsg ?: "下载失败") }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -333,5 +290,4 @@ class UpgradeManager : IDownload {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
@@ -83,6 +83,16 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun recordDownloadPause(downloadUrl: String) {
|
||||
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadPause, downloadUrl = downloadUrl, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertDownloadRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_pause" to GsonUtils.toJson(record)))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun recordDownloadFailed(downloadUrl: String, error: String) {
|
||||
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadFailed, failReason = error, downloadUrl = downloadUrl, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertDownloadRecord(record)
|
||||
|
||||
@@ -151,6 +151,8 @@ data class DownloadRecord(
|
||||
|
||||
DownloadStart,
|
||||
|
||||
DownloadPause,
|
||||
|
||||
DownloadFailed,
|
||||
|
||||
DownloadComplete;
|
||||
|
||||
Reference in New Issue
Block a user