QQ浏览器 v12.2.3.7053版本的 MD5 值为:8285ab3059e5c8b521a264dfbc5c3685

以下内容为反编译后的 MonitorSoMgr.java 源代码,内容仅作参考


package com.tencent.mtt.miniprogram.monitor;

import android.text.TextUtils;
import com.tencent.common.threadpool.BrowserExecutorSupplier;
import com.tencent.common.utils.PlatformUtils;
import com.tencent.mtt.ContextHolder;
import com.tencent.mtt.base.stat.utils.PlatformStatUtils;
import com.tencent.mtt.browser.download.business.core.BusinessDownloadService;
import com.tencent.mtt.browser.download.core.impl.DownloadServiceManager;
import com.tencent.mtt.browser.download.engine.DownloadErrorDetail;
import com.tencent.mtt.browser.download.engine.DownloadInfo;
import com.tencent.mtt.browser.download.engine.DownloadTask;
import com.tencent.mtt.browser.download.engine.DownloadTaskListener;
import com.tencent.mtt.browser.download.engine.PauseReason;
import com.tencent.pagespeedsdk.util.PSFileUtil;
import com.tencent.pagespeedsdk.util.PSGZipUtil;
import java.io.File;

public class MonitorSoMgr implements DownloadTaskListener {
    public static final String MINI_MONITOR_SO_TAG = "mini_monitor_so_mgr";
    public static String SO_DIR = "opencv-64-miniapp-1.1.92";
    public static String SO_DOWNLOAD_URL = "https://dlied5.qq.com/now/miniapp/opencv-64-miniapp-1.1.92.zip";
    public static final String SO_PATCH_FOLDER = ContextHolder.getAppContext().getFilesDir().getPath();
    public static String ZIP_FILE_NAME = "opencv-64-miniapp-1.1.92.zip";
    private static MonitorSoMgr instance = null;
    private static final String so32_name = "opencv-32-miniapp-1.1.92.zip";
    private static final String so32_url = "https://dlied5.qq.com/now/miniapp/opencv-32-miniapp-1.1.92.zip";
    private static final String so64_name = "opencv-64-miniapp-1.1.92.zip";
    private static final String so64_url = "https://dlied5.qq.com/now/miniapp/opencv-64-miniapp-1.1.92.zip";
    private static final String soVersion = "1.1.92";
    private static final String so_dir_32 = "opencv-32-miniapp-1.1.92";
    private static final String so_dir_32_before = "opencv-32-miniapp-";
    private static final String so_dir_64 = "opencv-64-miniapp-1.1.92";
    private static final String so_dir_64_before = "opencv-64-miniapp-";
    private CheckSoCallback mCheckSoCallback;
    private volatile boolean mDonePrepareSoStep = false;
    private String opencvJava4SoPath;
    private String opencvSoPath;

    public interface CheckSoCallback {
        void onSoFileValid();
    }

    private MonitorSoMgr() {
        String str;
        if (PlatformUtils.isCurrentProcess64Bit()) {
            SO_DOWNLOAD_URL = so64_url;
            ZIP_FILE_NAME = so64_name;
            str = so_dir_64;
        } else {
            SO_DOWNLOAD_URL = so32_url;
            ZIP_FILE_NAME = so32_name;
            str = so_dir_32;
        }
        SO_DIR = str;
    }

    private boolean checkSoExist() {
        File file = new File(SO_PATCH_FOLDER, SO_DIR);
        if (file.exists() && file.length() > 0) {
            return checkSoFileExist();
        }
        File file2 = new File(SO_PATCH_FOLDER, ZIP_FILE_NAME);
        if (!file2.exists() || file2.length() <= 0) {
            return false;
        }
        unZipSo(file2.getAbsolutePath());
        return checkSoFileExist();
    }

    private boolean checkSoFileExist() {
        this.opencvSoPath = null;
        this.opencvJava4SoPath = null;
        File file = new File(SO_PATCH_FOLDER, SO_DIR + "/libOpenCV.so");
        File file2 = new File(SO_PATCH_FOLDER, SO_DIR + "/libopencv_java4.so");
        if (file.exists() && file.length() > 0) {
            this.opencvSoPath = file.getAbsolutePath();
        }
        if (file2.exists() && file2.length() > 0) {
            this.opencvJava4SoPath = file2.getAbsolutePath();
        }
        return (TextUtils.isEmpty(this.opencvSoPath) || TextUtils.isEmpty(this.opencvJava4SoPath)) ? false : true;
    }

    public static MonitorSoMgr getInstance() {
        if (instance == null) {
            synchronized (MonitorSoMgr.class) {
                if (instance == null) {
                    instance = new MonitorSoMgr();
                }
            }
        }
        return instance;
    }

    private DownloadTask isTaskInDownload() {
        for (DownloadTask downloadTask : DownloadServiceManager.a().getAllTaskList(true)) {
            if (downloadTask.j().equals(SO_DOWNLOAD_URL)) {
                return downloadTask;
            }
        }
        return null;
    }

    private void realDownloadSo(boolean z) {
        DownloadInfo downloadInfo = new DownloadInfo();
        downloadInfo.f37604a = SO_DOWNLOAD_URL;
        downloadInfo.f37606c = ZIP_FILE_NAME;
        downloadInfo.f = SO_PATCH_FOLDER;
        downloadInfo.A = true;
        downloadInfo.H = z ? downloadInfo.H | Integer.MIN_VALUE : downloadInfo.H & Integer.MAX_VALUE;
        DownloadServiceManager.a().startDownloadTask(downloadInfo, null, null);
    }

    private boolean unZipSo(String str) {
        StringBuilder sb = new StringBuilder();
        sb.append(SO_PATCH_FOLDER);
        sb.append("/");
        sb.append(SO_DIR);
        return PSGZipUtil.a(str, sb.toString()) == 0;
    }

    public void checkSoValid(final CheckSoCallback checkSoCallback) {
        this.mCheckSoCallback = checkSoCallback;
        if (this.mDonePrepareSoStep) {
            PlatformStatUtils.a("MINIAPPMONITOR_SO_EXISTS");
            checkSoCallback.onSoFileValid();
        } else {
            if (this.mDonePrepareSoStep) {
                return;
            }
            BrowserExecutorSupplier.getInstance().getIoExecutor().execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        DownloadServiceManager.a().addTaskListener(MonitorSoMgr.this);
                        MonitorSoMgr.this.mDonePrepareSoStep = MonitorSoMgr.this.startDownloadSo(false);
                        if (MonitorSoMgr.this.mDonePrepareSoStep) {
                            checkSoCallback.onSoFileValid();
                        }
                    } catch (Exception unused) {
                    }
                }
            });
        }
    }

    public String getOpencvJava4SoPath() {
        return this.opencvJava4SoPath;
    }

    public String getOpencvSoPath() {
        return this.opencvSoPath;
    }

    public boolean loadSo(String str, String str2) {
        try {
            System.load(str2);
            System.load(str);
            return true;
        } catch (Exception | UnsatisfiedLinkError unused) {
            return false;
        }
    }

    @Override
    public void onTaskCompleted(DownloadTask downloadTask) {
        if (SO_DOWNLOAD_URL.equals(downloadTask.j())) {
            try {
                if (checkSoExist()) {
                    this.mDonePrepareSoStep = true;
                    if (this.mCheckSoCallback != null) {
                        this.mCheckSoCallback.onSoFileValid();
                    }
                    PlatformStatUtils.a("MINIAPPMONITOR_SO_DOWNLOADOK");
                }
                DownloadServiceManager.a().removeTaskListener(this);
            } catch (Exception unused) {
            }
        }
    }

    @Override
    public void onTaskCreated(DownloadTask downloadTask) {
        if (SO_DOWNLOAD_URL.equals(downloadTask.j())) {
            try {
                PSFileUtil.a(new File(SO_PATCH_FOLDER, ZIP_FILE_NAME));
                PSFileUtil.b(new File(SO_PATCH_FOLDER, SO_DIR));
                PSFileUtil.a(SO_PATCH_FOLDER, SO_DIR, so_dir_64_before, so_dir_32_before);
            } catch (Exception unused) {
            }
        }
    }

    @Override
    public void onTaskFailed(DownloadTask downloadTask, DownloadErrorDetail downloadErrorDetail) {
        if (SO_DOWNLOAD_URL.equals(downloadTask.j())) {
            DownloadServiceManager.a().removeTaskListener(this);
        }
    }

    @Override
    public void onTaskPaused(DownloadTask downloadTask, PauseReason pauseReason) {
        SO_DOWNLOAD_URL.equals(downloadTask.j());
    }

    @Override
    public void onTaskProgress(DownloadTask downloadTask) {
        SO_DOWNLOAD_URL.equals(downloadTask.j());
    }

    @Override
    public void onTaskRemoved(DownloadTask downloadTask) {
        SO_DOWNLOAD_URL.equals(downloadTask.j());
    }

    @Override
    public void onTaskStarted(DownloadTask downloadTask) {
        SO_DOWNLOAD_URL.equals(downloadTask.j());
    }

    @Override
    public void onTaskWaiting(DownloadTask downloadTask) {
        SO_DOWNLOAD_URL.equals(downloadTask.j());
    }

    public boolean startDownloadSo(boolean z) {
        if (checkSoExist()) {
            PlatformStatUtils.a("MINIAPPMONITOR_SO_EXISTS");
            return true;
        }
        PlatformStatUtils.a("MINIAPPMONITOR_SO_NOEXISTS");
        DownloadTask isTaskInDownload = isTaskInDownload();
        if (isTaskInDownload == null || isTaskInDownload.aB()) {
            realDownloadSo(z);
            return false;
        }
        if (isTaskInDownload.U() == 2) {
            return false;
        }
        if (z) {
            BusinessDownloadService.getInstance().a().c(isTaskInDownload);
            return false;
        }
        isTaskInDownload.b();
        return false;
    }
}