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;
}
}