diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeAppNetWorkManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeAppNetWorkManager.kt index c891dd99cc..75af486bdf 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeAppNetWorkManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeAppNetWorkManager.kt @@ -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) { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt index b37b44fff2..be7e822a58 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/UpgradeManager.kt @@ -41,14 +41,14 @@ class UpgradeManager : IDownload { } } - private var map: Map? = null - private val upgradeProvider: IMoGoUpgradeProvider? by lazy { CallerBase.getApiInstance(IMoGoUpgradeProvider::class.java, MogoServicePaths.PATH_UPGRADE_TYPE_API) } private val types by lazy { ConcurrentHashMap() } - 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 { } }) } - } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/MoGoUpgradeProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/MoGoUpgradeProviderImpl.kt index 3ac35b532e..f8afaa5ab0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/MoGoUpgradeProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/MoGoUpgradeProviderImpl.kt @@ -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) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/vo/Vo.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/vo/Vo.kt index a73863d5b2..f454491560 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/vo/Vo.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/provider/db/vo/Vo.kt @@ -151,6 +151,8 @@ data class DownloadRecord( DownloadStart, + DownloadPause, + DownloadFailed, DownloadComplete; diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/upgrade/IMoGoUpgradeProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/upgrade/IMoGoUpgradeProvider.kt index f0ef0c7c81..3eea1a10d3 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/upgrade/IMoGoUpgradeProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/upgrade/IMoGoUpgradeProvider.kt @@ -16,6 +16,8 @@ interface IMoGoUpgradeProvider: IProvider { suspend fun recordDownloadStart(downloadUrl: String) + suspend fun recordDownloadPause(downloadUrl: String) + suspend fun recordDownloadFailed(downloadUrl: String, error: String) suspend fun recordDownloadSuccess(downloadUrl: String)