what-the-bank/sources/io/flutter/embedding/engine/loader/ResourceExtractor.java

262 lines
10 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package io.flutter.embedding.engine.loader;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Process;
import android.view.View;
import android.widget.ExpandableListView;
import io.flutter.Log;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import o.xzZ;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes.dex */
public class ResourceExtractor {
private static final String[] SUPPORTED_ABIS = getSupportedAbis();
private static final String TAG = "ResourceExtractor";
private static final String TIMESTAMP_PREFIX = "res_timestamp-";
private final AssetManager mAssetManager;
private final String mDataDirPath;
private ExtractTask mExtractTask;
private final PackageManager mPackageManager;
private final String mPackageName;
private final HashSet<String> mResources = new HashSet<>();
static long getVersionCode(PackageInfo packageInfo) {
if (Build.VERSION.SDK_INT >= 28) {
return packageInfo.getLongVersionCode();
}
return packageInfo.versionCode;
}
/* loaded from: classes.dex */
static class ExtractTask extends AsyncTask<Void, Void, Void> {
private static int b = 0;
private static int e = 1;
private final AssetManager mAssetManager;
private final String mDataDirPath;
private final PackageManager mPackageManager;
private final String mPackageName;
private final HashSet<String> mResources;
ExtractTask(String str, HashSet<String> hashSet, String str2, PackageManager packageManager, AssetManager assetManager) {
this.mDataDirPath = str;
this.mResources = hashSet;
this.mAssetManager = assetManager;
this.mPackageName = str2;
this.mPackageManager = packageManager;
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // android.os.AsyncTask
public Void doInBackground(Void... voidArr) {
File file = new File(this.mDataDirPath);
String checkTimestamp = ResourceExtractor.checkTimestamp(file, this.mPackageManager, this.mPackageName);
if (checkTimestamp == null) {
return null;
}
ResourceExtractor.deleteFiles(this.mDataDirPath, this.mResources);
if (extractAPK(file) && checkTimestamp != null) {
try {
new File(file, checkTimestamp).createNewFile();
} catch (IOException unused) {
Log.w(ResourceExtractor.TAG, "Failed to write resource timestamp");
}
}
return null;
}
private boolean extractAPK(File file) {
int i = 2 % 2;
Iterator<String> it = this.mResources.iterator();
int i2 = b + 83;
e = i2 % 128;
int i3 = i2 % 2;
while (it.hasNext()) {
String next = it.next();
try {
File file2 = new File(file, next);
if (!file2.exists()) {
if (file2.getParentFile() != null) {
int i4 = e + 69;
b = i4 % 128;
int i5 = i4 % 2;
file2.getParentFile().mkdirs();
}
try {
Object[] objArr = {this.mAssetManager, next};
Object obj = xzZ.y.get(-867414553);
if (obj == null) {
obj = ((Class) xzZ.c(5 - ExpandableListView.getPackedPositionType(0L), 5 - (Process.myTid() >> 22), (char) View.MeasureSpec.makeMeasureSpec(0, 0))).getMethod("NN_", AssetManager.class, String.class);
xzZ.y.put(-867414553, obj);
}
Object obj2 = null;
InputStream inputStream = (InputStream) ((Method) obj).invoke(null, objArr);
try {
FileOutputStream fileOutputStream = new FileOutputStream(file2);
try {
ResourceExtractor.copy(inputStream, fileOutputStream);
fileOutputStream.close();
if (inputStream != null) {
int i6 = e + 69;
b = i6 % 128;
if (i6 % 2 != 0) {
inputStream.close();
obj2.hashCode();
throw null;
}
inputStream.close();
} else {
continue;
}
} finally {
}
} catch (Throwable th) {
if (inputStream != null) {
try {
inputStream.close();
} catch (Throwable th2) {
th.addSuppressed(th2);
}
}
throw th;
}
} catch (Throwable th3) {
Throwable cause = th3.getCause();
if (cause != null) {
throw cause;
}
throw th3;
}
}
} catch (FileNotFoundException unused) {
} catch (IOException e2) {
Log.w(ResourceExtractor.TAG, "Exception unpacking resources: " + e2.getMessage());
ResourceExtractor.deleteFiles(this.mDataDirPath, this.mResources);
return false;
}
}
return true;
}
}
ResourceExtractor(String str, String str2, PackageManager packageManager, AssetManager assetManager) {
this.mDataDirPath = str;
this.mPackageName = str2;
this.mPackageManager = packageManager;
this.mAssetManager = assetManager;
}
ResourceExtractor addResource(String str) {
this.mResources.add(str);
return this;
}
ResourceExtractor addResources(Collection<String> collection) {
this.mResources.addAll(collection);
return this;
}
ResourceExtractor start() {
ExtractTask extractTask = new ExtractTask(this.mDataDirPath, this.mResources, this.mPackageName, this.mPackageManager, this.mAssetManager);
this.mExtractTask = extractTask;
extractTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Void[0]);
return this;
}
/* JADX INFO: Access modifiers changed from: package-private */
public void waitForCompletion() {
ExtractTask extractTask = this.mExtractTask;
if (extractTask == null) {
return;
}
try {
extractTask.get();
} catch (InterruptedException | CancellationException | ExecutionException unused) {
deleteFiles(this.mDataDirPath, this.mResources);
}
}
private static String[] getExistingTimestamps(File file) {
return file.list(new FilenameFilter() { // from class: io.flutter.embedding.engine.loader.ResourceExtractor.1
@Override // java.io.FilenameFilter
public boolean accept(File file2, String str) {
return str.startsWith(ResourceExtractor.TIMESTAMP_PREFIX);
}
});
}
/* JADX INFO: Access modifiers changed from: private */
public static void deleteFiles(String str, HashSet<String> hashSet) {
File file = new File(str);
Iterator<String> it = hashSet.iterator();
while (it.hasNext()) {
File file2 = new File(file, it.next());
if (file2.exists()) {
file2.delete();
}
}
String[] existingTimestamps = getExistingTimestamps(file);
if (existingTimestamps == null) {
return;
}
for (String str2 : existingTimestamps) {
new File(file, str2).delete();
}
}
/* JADX INFO: Access modifiers changed from: private */
public static String checkTimestamp(File file, PackageManager packageManager, String str) {
try {
PackageInfo packageInfo = packageManager.getPackageInfo(str, 0);
if (packageInfo == null) {
return TIMESTAMP_PREFIX;
}
String str2 = TIMESTAMP_PREFIX + getVersionCode(packageInfo) + "-" + packageInfo.lastUpdateTime;
String[] existingTimestamps = getExistingTimestamps(file);
if (existingTimestamps == null) {
return str2;
}
int length = existingTimestamps.length;
if (existingTimestamps.length == 1 && str2.equals(existingTimestamps[0])) {
return null;
}
return str2;
} catch (PackageManager.NameNotFoundException unused) {
return TIMESTAMP_PREFIX;
}
}
/* JADX INFO: Access modifiers changed from: private */
public static void copy(InputStream inputStream, OutputStream outputStream) throws IOException {
byte[] bArr = new byte[16384];
while (true) {
int read = inputStream.read(bArr);
if (read < 0) {
return;
} else {
outputStream.write(bArr, 0, read);
}
}
}
private static String[] getSupportedAbis() {
return Build.SUPPORTED_ABIS;
}
}