京东到家.apk(点击下载) / DefaultPatchReporter.java


package com.jddj.weaver.lib.reporter;

import android.content.Context;
import android.content.Intent;
import com.jddj.weaver.lib.util.UpgradePatchRetry;
import com.jddj.weaver.lib.util.WeaverLog;
import com.jddj.weaver.lib.weaver.Weaver;
import com.jddj.weaver.loader.shareutil.ShareConstants;
import com.jddj.weaver.loader.shareutil.SharePatchFileUtil;
import com.jddj.weaver.loader.shareutil.SharePatchInfo;
import com.jddj.weaver.loader.shareutil.ShareWeaverInternals;
import java.io.File;
import java.util.List;

public class DefaultPatchReporter implements PatchReporter {
    private static final String TAG = "Weaver.DefaultPatchReporter";
    private static boolean shouldRetry;
    protected final Context context;

    public DefaultPatchReporter(Context context2) {
        this.context = context2;
    }

    @Override // com.jddj.weaver.lib.reporter.PatchReporter
    public void onPatchServiceStart(Intent intent) {
        WeaverLog.i(TAG, "patchReporter onPatchServiceStart: patch service start", new Object[0]);
        shouldRetry = false;
        UpgradePatchRetry.getInstance(this.context).onPatchServiceStart(intent);
    }

    @Override // com.jddj.weaver.lib.reporter.PatchReporter
    public void onPatchPackageCheckFail(File file, int i) {
        WeaverLog.i(TAG, "patchReporter onPatchPackageCheckFail: package check failed. path: %s, code: %d", file.getAbsolutePath(), Integer.valueOf(i));
        if (i == -3 || i == -4 || i == -8) {
            Weaver.with(this.context).cleanPatchByPatchApk(file);
        }
    }

    @Override // com.jddj.weaver.lib.reporter.PatchReporter
    public void onPatchVersionCheckFail(File file, SharePatchInfo sharePatchInfo, String str) {
        WeaverLog.i(TAG, "patchReporter onPatchVersionCheckFail: patch version exist. path: %s, version: %s", file.getAbsolutePath(), str);
    }

    @Override // com.jddj.weaver.lib.reporter.PatchReporter
    public void onPatchTypeExtractFail(File file, File file2, String str, int i) {
        WeaverLog.i(TAG, "patchReporter onPatchTypeExtractFail: file extract fail type: %s, path: %s, extractTo: %s, filename: %s", ShareWeaverInternals.getTypeString(i), file.getPath(), file2.getPath(), str);
        Weaver.with(this.context).cleanPatchByPatchApk(file);
    }

    @Override // com.jddj.weaver.lib.reporter.PatchReporter
    public void onPatchDexOptFail(File file, List<File> list, Throwable th) {
        WeaverLog.i(TAG, "patchReporter onPatchDexOptFail: dex opt fail path: %s, dex size: %d", file.getAbsolutePath(), Integer.valueOf(list.size()));
        WeaverLog.printErrStackTrace(TAG, th, "onPatchDexOptFail:", new Object[0]);
        if (th.getMessage().contains(ShareConstants.CHECK_DEX_OAT_EXIST_FAIL) || th.getMessage().contains(ShareConstants.CHECK_DEX_OAT_FORMAT_FAIL)) {
            shouldRetry = true;
            deleteOptFiles(list);
            return;
        }
        Weaver.with(this.context).cleanPatchByPatchApk(file);
    }

    @Override // com.jddj.weaver.lib.reporter.PatchReporter
    public void onPatchResult(File file, boolean z, long j) {
        WeaverLog.i(TAG, "patchReporter onPatchResult: patch all result path: %s, success: %b, cost: %d", file.getAbsolutePath(), Boolean.valueOf(z), Long.valueOf(j));
        if (!shouldRetry) {
            UpgradePatchRetry.getInstance(this.context).onPatchServiceResult();
        }
    }

    @Override // com.jddj.weaver.lib.reporter.PatchReporter
    public void onPatchInfoCorrupted(File file, String str, String str2) {
        WeaverLog.i(TAG, "patchReporter onPatchInfoCorrupted: patch info is corrupted. old: %s, new: %s", str, str2);
        Weaver.with(this.context).cleanPatch();
    }

    @Override // com.jddj.weaver.lib.reporter.PatchReporter
    public void onPatchException(File file, Throwable th) {
        WeaverLog.i(TAG, "patchReporter onPatchException: patch exception path: %s, throwable: %s", file.getAbsolutePath(), th.getMessage());
        WeaverLog.e(TAG, "weaver patch exception, welcome to submit issue to us: https://github.com/Tencent/weaver/issues", new Object[0]);
        WeaverLog.printErrStackTrace(TAG, th, "weaver patch exception", new Object[0]);
        Weaver.with(this.context).setWeaverDisable();
        Weaver.with(this.context).cleanPatchByPatchApk(file);
    }

    private void deleteOptFiles(List<File> list) {
        for (File file : list) {
            SharePatchFileUtil.safeDeleteFile(file);
        }
    }
}