ADD week 5
This commit is contained in:
@@ -0,0 +1,299 @@
|
||||
package androidx.profileinstaller;
|
||||
|
||||
import android.content.res.AssetManager;
|
||||
import android.os.Build;
|
||||
import androidx.profileinstaller.ProfileInstaller;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class DeviceProfileWriter {
|
||||
private final String mApkName;
|
||||
private final AssetManager mAssetManager;
|
||||
private final File mCurProfile;
|
||||
private final ProfileInstaller.DiagnosticsCallback mDiagnostics;
|
||||
private final Executor mExecutor;
|
||||
private DexProfileData[] mProfile;
|
||||
private final String mProfileMetaSourceLocation;
|
||||
private final String mProfileSourceLocation;
|
||||
private byte[] mTranscodedProfile;
|
||||
private boolean mDeviceSupportsAotProfile = false;
|
||||
private final byte[] mDesiredVersion = desiredVersion();
|
||||
|
||||
private static boolean requiresMetadata() {
|
||||
if (Build.VERSION.SDK_INT < 24 || Build.VERSION.SDK_INT > 33) {
|
||||
return false;
|
||||
}
|
||||
int i = Build.VERSION.SDK_INT;
|
||||
if (i != 24 && i != 25) {
|
||||
switch (i) {
|
||||
case 31:
|
||||
case 32:
|
||||
case 33:
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void result(final int i, final Object obj) {
|
||||
this.mExecutor.execute(new Runnable() { // from class: androidx.profileinstaller.DeviceProfileWriter$$ExternalSyntheticLambda0
|
||||
@Override // java.lang.Runnable
|
||||
public final void run() {
|
||||
DeviceProfileWriter.this.m169lambda$result$0$androidxprofileinstallerDeviceProfileWriter(i, obj);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* renamed from: lambda$result$0$androidx-profileinstaller-DeviceProfileWriter, reason: not valid java name */
|
||||
/* synthetic */ void m169lambda$result$0$androidxprofileinstallerDeviceProfileWriter(int i, Object obj) {
|
||||
this.mDiagnostics.onResultReceived(i, obj);
|
||||
}
|
||||
|
||||
public DeviceProfileWriter(AssetManager assetManager, Executor executor, ProfileInstaller.DiagnosticsCallback diagnosticsCallback, String str, String str2, String str3, File file) {
|
||||
this.mAssetManager = assetManager;
|
||||
this.mExecutor = executor;
|
||||
this.mDiagnostics = diagnosticsCallback;
|
||||
this.mApkName = str;
|
||||
this.mProfileSourceLocation = str2;
|
||||
this.mProfileMetaSourceLocation = str3;
|
||||
this.mCurProfile = file;
|
||||
}
|
||||
|
||||
public boolean deviceAllowsProfileInstallerAotWrites() {
|
||||
if (this.mDesiredVersion == null) {
|
||||
result(3, Integer.valueOf(Build.VERSION.SDK_INT));
|
||||
return false;
|
||||
}
|
||||
if (this.mCurProfile.canWrite()) {
|
||||
this.mDeviceSupportsAotProfile = true;
|
||||
return true;
|
||||
}
|
||||
result(4, null);
|
||||
return false;
|
||||
}
|
||||
|
||||
private void assertDeviceAllowsProfileInstallerAotWritesCalled() {
|
||||
if (!this.mDeviceSupportsAotProfile) {
|
||||
throw new IllegalStateException("This device doesn't support aot. Did you call deviceSupportsAotProfile()?");
|
||||
}
|
||||
}
|
||||
|
||||
public DeviceProfileWriter read() {
|
||||
DeviceProfileWriter addMetadata;
|
||||
assertDeviceAllowsProfileInstallerAotWritesCalled();
|
||||
if (this.mDesiredVersion == null) {
|
||||
return this;
|
||||
}
|
||||
InputStream profileInputStream = getProfileInputStream(this.mAssetManager);
|
||||
if (profileInputStream != null) {
|
||||
this.mProfile = readProfileInternal(profileInputStream);
|
||||
}
|
||||
DexProfileData[] dexProfileDataArr = this.mProfile;
|
||||
return (dexProfileDataArr == null || !requiresMetadata() || (addMetadata = addMetadata(dexProfileDataArr, this.mDesiredVersion)) == null) ? this : addMetadata;
|
||||
}
|
||||
|
||||
private InputStream openStreamFromAssets(AssetManager assetManager, String str) throws IOException {
|
||||
try {
|
||||
return assetManager.openFd(str).createInputStream();
|
||||
} catch (FileNotFoundException e) {
|
||||
String message = e.getMessage();
|
||||
if (message != null && message.contains("compressed")) {
|
||||
this.mDiagnostics.onDiagnosticReceived(5, null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private InputStream getProfileInputStream(AssetManager assetManager) {
|
||||
try {
|
||||
return openStreamFromAssets(assetManager, this.mProfileSourceLocation);
|
||||
} catch (FileNotFoundException e) {
|
||||
this.mDiagnostics.onResultReceived(6, e);
|
||||
return null;
|
||||
} catch (IOException e2) {
|
||||
this.mDiagnostics.onResultReceived(7, e2);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private DexProfileData[] readProfileInternal(InputStream inputStream) {
|
||||
try {
|
||||
} catch (IOException e) {
|
||||
this.mDiagnostics.onResultReceived(7, e);
|
||||
}
|
||||
try {
|
||||
try {
|
||||
DexProfileData[] readProfile = ProfileTranscoder.readProfile(inputStream, ProfileTranscoder.readHeader(inputStream, ProfileTranscoder.MAGIC_PROF), this.mApkName);
|
||||
try {
|
||||
inputStream.close();
|
||||
return readProfile;
|
||||
} catch (IOException e2) {
|
||||
this.mDiagnostics.onResultReceived(7, e2);
|
||||
return readProfile;
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (IOException e3) {
|
||||
this.mDiagnostics.onResultReceived(7, e3);
|
||||
}
|
||||
throw th;
|
||||
}
|
||||
} catch (IOException e4) {
|
||||
this.mDiagnostics.onResultReceived(7, e4);
|
||||
inputStream.close();
|
||||
return null;
|
||||
} catch (IllegalStateException e5) {
|
||||
this.mDiagnostics.onResultReceived(8, e5);
|
||||
inputStream.close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private DeviceProfileWriter addMetadata(DexProfileData[] dexProfileDataArr, byte[] bArr) {
|
||||
InputStream openStreamFromAssets;
|
||||
try {
|
||||
openStreamFromAssets = openStreamFromAssets(this.mAssetManager, this.mProfileMetaSourceLocation);
|
||||
} catch (FileNotFoundException e) {
|
||||
this.mDiagnostics.onResultReceived(9, e);
|
||||
} catch (IOException e2) {
|
||||
this.mDiagnostics.onResultReceived(7, e2);
|
||||
} catch (IllegalStateException e3) {
|
||||
this.mProfile = null;
|
||||
this.mDiagnostics.onResultReceived(8, e3);
|
||||
}
|
||||
if (openStreamFromAssets == null) {
|
||||
if (openStreamFromAssets != null) {
|
||||
openStreamFromAssets.close();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
this.mProfile = ProfileTranscoder.readMeta(openStreamFromAssets, ProfileTranscoder.readHeader(openStreamFromAssets, ProfileTranscoder.MAGIC_PROFM), bArr, dexProfileDataArr);
|
||||
if (openStreamFromAssets != null) {
|
||||
openStreamFromAssets.close();
|
||||
}
|
||||
return this;
|
||||
} catch (Throwable th) {
|
||||
if (openStreamFromAssets != null) {
|
||||
try {
|
||||
openStreamFromAssets.close();
|
||||
} catch (Throwable th2) {
|
||||
th.addSuppressed(th2);
|
||||
}
|
||||
}
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
|
||||
public DeviceProfileWriter transcodeIfNeeded() {
|
||||
ByteArrayOutputStream byteArrayOutputStream;
|
||||
DexProfileData[] dexProfileDataArr = this.mProfile;
|
||||
byte[] bArr = this.mDesiredVersion;
|
||||
if (dexProfileDataArr != null && bArr != null) {
|
||||
assertDeviceAllowsProfileInstallerAotWritesCalled();
|
||||
try {
|
||||
byteArrayOutputStream = new ByteArrayOutputStream();
|
||||
try {
|
||||
ProfileTranscoder.writeHeader(byteArrayOutputStream, bArr);
|
||||
} catch (Throwable th) {
|
||||
try {
|
||||
byteArrayOutputStream.close();
|
||||
} catch (Throwable th2) {
|
||||
th.addSuppressed(th2);
|
||||
}
|
||||
throw th;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
this.mDiagnostics.onResultReceived(7, e);
|
||||
} catch (IllegalStateException e2) {
|
||||
this.mDiagnostics.onResultReceived(8, e2);
|
||||
}
|
||||
if (!ProfileTranscoder.transcodeAndWriteBody(byteArrayOutputStream, bArr, dexProfileDataArr)) {
|
||||
this.mDiagnostics.onResultReceived(5, null);
|
||||
this.mProfile = null;
|
||||
byteArrayOutputStream.close();
|
||||
return this;
|
||||
}
|
||||
this.mTranscodedProfile = byteArrayOutputStream.toByteArray();
|
||||
byteArrayOutputStream.close();
|
||||
this.mProfile = null;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
public boolean write() {
|
||||
byte[] bArr = this.mTranscodedProfile;
|
||||
if (bArr == null) {
|
||||
return false;
|
||||
}
|
||||
assertDeviceAllowsProfileInstallerAotWritesCalled();
|
||||
try {
|
||||
try {
|
||||
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bArr);
|
||||
try {
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(this.mCurProfile);
|
||||
try {
|
||||
Encoding.writeAll(byteArrayInputStream, fileOutputStream);
|
||||
result(1, null);
|
||||
fileOutputStream.close();
|
||||
byteArrayInputStream.close();
|
||||
return true;
|
||||
} finally {
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
try {
|
||||
byteArrayInputStream.close();
|
||||
} catch (Throwable th2) {
|
||||
th.addSuppressed(th2);
|
||||
}
|
||||
throw th;
|
||||
}
|
||||
} finally {
|
||||
this.mTranscodedProfile = null;
|
||||
this.mProfile = null;
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
result(6, e);
|
||||
return false;
|
||||
} catch (IOException e2) {
|
||||
result(7, e2);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] desiredVersion() {
|
||||
if (Build.VERSION.SDK_INT < 24 || Build.VERSION.SDK_INT > 33) {
|
||||
return null;
|
||||
}
|
||||
switch (Build.VERSION.SDK_INT) {
|
||||
case 24:
|
||||
case 25:
|
||||
return ProfileVersion.V001_N;
|
||||
case 26:
|
||||
return ProfileVersion.V005_O;
|
||||
case 27:
|
||||
return ProfileVersion.V009_O_MR1;
|
||||
case 28:
|
||||
case 29:
|
||||
case 30:
|
||||
return ProfileVersion.V010_P;
|
||||
case 31:
|
||||
case 32:
|
||||
case 33:
|
||||
return ProfileVersion.V015_S;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user