* Decompile and recreate Soul Browser v1.4.85 with APK CI builds Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix CI build: include bundled google.jks and remove PR trigger The apktool build failed in CI because app/unknown/.../google.jks was excluded by the *.jks gitignore rule. Whitelist app-bundled JKS files and commit the missing resource. Also remove the redundant pull_request workflow trigger. Co-authored-by: KaKi87 <KaKi87@pm.me> * Change package ID to com.github.kaki87.soulbrowser Rename the application ID so the rebuilt APK can be installed alongside the original Soul Browser from Google Play. - Update AndroidManifest package, permissions, providers, and actions - Update R class references in smali (com/github/kaki87/soulbrowser/R) - Update shortcuts.xml targetPackage - Rename app label to "Soul Rebuild" for easy identification Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix install compatibility: remove split APK metadata and bundle native libs The rebuilt APK still declared requiredSplitTypes and Play Store split metadata, causing Android to reject standalone installs as incompatible. - Remove requiredSplitTypes and split-related manifest meta-data - Merge native libs from all ABI splits with uncompressed storage - Page-align before signing for extractNativeLibs=false - Add .so to apktool doNotCompress list Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix install failure: use apksigner v2/v3 and bundle arm64 native libs Target SDK 36 requires APK Signature Scheme v2+, but jarsigner only produces v1 signatures, causing Android to reject the install. - Sign with apksigner (v1+v2+v3) instead of jarsigner - Add arm64-v8a native libraries from universal Soul Browser 1.4.79 - Set extractNativeLibs=true for reliable sideload installs - Commit stable debug keystore for consistent signatures across builds Co-authored-by: KaKi87 <KaKi87@pm.me> * Add committed debug keystore for consistent APK signatures Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix startup crash: use original classes2.dex desugar libraries Apktool recompiles smali_classes2 into a broken classes2.dex, causing ClassNotFoundException for j$.com.android.tools.r8.a at ML Kit init. Inject the original classes2.dex (Java 8+ desugar libs) after apktool build instead of using the recompiled version. Co-authored-by: KaKi87 <KaKi87@pm.me> * Fix missing drawable resources from density split APKs The base APK is an app bundle module; density-specific drawables like seek_thumb_nor_b live in config.xhdpi.apk and were missing after rebuild, causing Resources$NotFoundException at runtime. - Merge non-9-patch resources from split APKs before apktool build - Sync public.xml IDs from R smali only when backing files exist - Add 713 density-specific resource IDs to public.xml Co-authored-by: KaKi87 <KaKi87@pm.me> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
270 lines
9.2 KiB
Java
270 lines
9.2 KiB
Java
package kotlin.jvm.internal;
|
|
|
|
import java.util.Arrays;
|
|
import kotlin.KotlinNullPointerException;
|
|
import kotlin.SinceKotlin;
|
|
import kotlin.UninitializedPropertyAccessException;
|
|
|
|
/* loaded from: classes4.dex */
|
|
public class Intrinsics {
|
|
|
|
@SinceKotlin(version = "1.4")
|
|
/* loaded from: classes4.dex */
|
|
public static class Kotlin {
|
|
private Kotlin() {
|
|
}
|
|
}
|
|
|
|
private Intrinsics() {
|
|
}
|
|
|
|
public static boolean areEqual(Object obj, Object obj2) {
|
|
if (obj == null) {
|
|
return obj2 == null;
|
|
}
|
|
return obj.equals(obj2);
|
|
}
|
|
|
|
public static void checkExpressionValueIsNotNull(Object obj, String str) {
|
|
if (obj != null) {
|
|
} else {
|
|
throw ((IllegalStateException) sanitizeStackTrace(new IllegalStateException(android.support.v4.media.a.k(str, " must not be null"))));
|
|
}
|
|
}
|
|
|
|
public static void checkFieldIsNotNull(Object obj, String str, String str2) {
|
|
if (obj == null) {
|
|
throw ((IllegalStateException) sanitizeStackTrace(new IllegalStateException(android.support.v4.media.a.m("Field specified as non-null is null: ", str, ".", str2))));
|
|
}
|
|
}
|
|
|
|
public static void checkHasClass(String str) {
|
|
String replace = str.replace('/', '.');
|
|
try {
|
|
Class.forName(replace);
|
|
} catch (ClassNotFoundException e) {
|
|
throw ((ClassNotFoundException) sanitizeStackTrace(new ClassNotFoundException(android.support.v4.media.a.l("Class ", replace, " is not found. Please update the Kotlin runtime to the latest version"), e)));
|
|
}
|
|
}
|
|
|
|
public static void checkNotNull(Object obj) {
|
|
if (obj == null) {
|
|
throwJavaNpe();
|
|
}
|
|
}
|
|
|
|
public static void checkNotNullExpressionValue(Object obj, String str) {
|
|
if (obj != null) {
|
|
} else {
|
|
throw ((NullPointerException) sanitizeStackTrace(new NullPointerException(android.support.v4.media.a.k(str, " must not be null"))));
|
|
}
|
|
}
|
|
|
|
public static void checkNotNullParameter(Object obj, String str) {
|
|
if (obj == null) {
|
|
throwParameterIsNullNPE(str);
|
|
}
|
|
}
|
|
|
|
public static void checkParameterIsNotNull(Object obj, String str) {
|
|
if (obj == null) {
|
|
throwParameterIsNullIAE(str);
|
|
}
|
|
}
|
|
|
|
public static void checkReturnedValueIsNotNull(Object obj, String str, String str2) {
|
|
if (obj == null) {
|
|
throw ((IllegalStateException) sanitizeStackTrace(new IllegalStateException(android.support.v4.media.a.m("Method specified as non-null returned null: ", str, ".", str2))));
|
|
}
|
|
}
|
|
|
|
public static int compare(int i, int i2) {
|
|
if (i < i2) {
|
|
return -1;
|
|
}
|
|
return i == i2 ? 0 : 1;
|
|
}
|
|
|
|
private static String createParameterIsNullExceptionMessage(String str) {
|
|
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
|
|
String name = Intrinsics.class.getName();
|
|
int i = 0;
|
|
while (!stackTrace[i].getClassName().equals(name)) {
|
|
i++;
|
|
}
|
|
while (stackTrace[i].getClassName().equals(name)) {
|
|
i++;
|
|
}
|
|
StackTraceElement stackTraceElement = stackTrace[i];
|
|
StringBuilder u = androidx.work.impl.workers.a.u("Parameter specified as non-null is null: method ", stackTraceElement.getClassName(), ".", stackTraceElement.getMethodName(), ", parameter ");
|
|
u.append(str);
|
|
return u.toString();
|
|
}
|
|
|
|
public static void needClassReification() {
|
|
throwUndefinedForReified();
|
|
}
|
|
|
|
public static void reifiedOperationMarker(int i, String str) {
|
|
throwUndefinedForReified();
|
|
}
|
|
|
|
private static <T extends Throwable> T sanitizeStackTrace(T t) {
|
|
return (T) sanitizeStackTrace(t, Intrinsics.class.getName());
|
|
}
|
|
|
|
public static String stringPlus(String str, Object obj) {
|
|
return str + obj;
|
|
}
|
|
|
|
public static void throwAssert() {
|
|
throw ((AssertionError) sanitizeStackTrace(new AssertionError()));
|
|
}
|
|
|
|
public static void throwIllegalArgument() {
|
|
throw ((IllegalArgumentException) sanitizeStackTrace(new IllegalArgumentException()));
|
|
}
|
|
|
|
public static void throwIllegalState() {
|
|
throw ((IllegalStateException) sanitizeStackTrace(new IllegalStateException()));
|
|
}
|
|
|
|
@SinceKotlin(version = "1.4")
|
|
public static void throwJavaNpe() {
|
|
throw ((NullPointerException) sanitizeStackTrace(new NullPointerException()));
|
|
}
|
|
|
|
public static void throwNpe() {
|
|
throw ((KotlinNullPointerException) sanitizeStackTrace(new KotlinNullPointerException()));
|
|
}
|
|
|
|
private static void throwParameterIsNullIAE(String str) {
|
|
throw ((IllegalArgumentException) sanitizeStackTrace(new IllegalArgumentException(createParameterIsNullExceptionMessage(str))));
|
|
}
|
|
|
|
private static void throwParameterIsNullNPE(String str) {
|
|
throw ((NullPointerException) sanitizeStackTrace(new NullPointerException(createParameterIsNullExceptionMessage(str))));
|
|
}
|
|
|
|
public static void throwUndefinedForReified() {
|
|
throwUndefinedForReified("This function has a reified type parameter and thus can only be inlined at compilation time, not called directly.");
|
|
}
|
|
|
|
public static void throwUninitializedProperty(String str) {
|
|
throw ((UninitializedPropertyAccessException) sanitizeStackTrace(new UninitializedPropertyAccessException(str)));
|
|
}
|
|
|
|
public static void throwUninitializedPropertyAccessException(String str) {
|
|
throwUninitializedProperty("lateinit property " + str + " has not been initialized");
|
|
}
|
|
|
|
@SinceKotlin(version = "1.1")
|
|
public static boolean areEqual(Double d, Double d2) {
|
|
return d == null ? d2 == null : d2 != null && d.doubleValue() == d2.doubleValue();
|
|
}
|
|
|
|
public static void checkNotNull(Object obj, String str) {
|
|
if (obj == null) {
|
|
throwJavaNpe(str);
|
|
}
|
|
}
|
|
|
|
public static int compare(long j, long j2) {
|
|
if (j < j2) {
|
|
return -1;
|
|
}
|
|
return j == j2 ? 0 : 1;
|
|
}
|
|
|
|
public static void needClassReification(String str) {
|
|
throwUndefinedForReified(str);
|
|
}
|
|
|
|
public static void reifiedOperationMarker(int i, String str, String str2) {
|
|
throwUndefinedForReified(str2);
|
|
}
|
|
|
|
public static <T extends Throwable> T sanitizeStackTrace(T t, String str) {
|
|
StackTraceElement[] stackTrace = t.getStackTrace();
|
|
int length = stackTrace.length;
|
|
int i = -1;
|
|
for (int i2 = 0; i2 < length; i2++) {
|
|
if (str.equals(stackTrace[i2].getClassName())) {
|
|
i = i2;
|
|
}
|
|
}
|
|
t.setStackTrace((StackTraceElement[]) Arrays.copyOfRange(stackTrace, i + 1, length));
|
|
return t;
|
|
}
|
|
|
|
public static void throwAssert(String str) {
|
|
throw ((AssertionError) sanitizeStackTrace(new AssertionError(str)));
|
|
}
|
|
|
|
public static void throwIllegalArgument(String str) {
|
|
throw ((IllegalArgumentException) sanitizeStackTrace(new IllegalArgumentException(str)));
|
|
}
|
|
|
|
public static void throwIllegalState(String str) {
|
|
throw ((IllegalStateException) sanitizeStackTrace(new IllegalStateException(str)));
|
|
}
|
|
|
|
@SinceKotlin(version = "1.4")
|
|
public static void throwJavaNpe(String str) {
|
|
throw ((NullPointerException) sanitizeStackTrace(new NullPointerException(str)));
|
|
}
|
|
|
|
public static void throwNpe(String str) {
|
|
throw ((KotlinNullPointerException) sanitizeStackTrace(new KotlinNullPointerException(str)));
|
|
}
|
|
|
|
public static void throwUndefinedForReified(String str) {
|
|
throw new UnsupportedOperationException(str);
|
|
}
|
|
|
|
@SinceKotlin(version = "1.1")
|
|
public static boolean areEqual(Double d, double d2) {
|
|
return d != null && d.doubleValue() == d2;
|
|
}
|
|
|
|
@SinceKotlin(version = "1.1")
|
|
public static boolean areEqual(double d, Double d2) {
|
|
return d2 != null && d == d2.doubleValue();
|
|
}
|
|
|
|
@SinceKotlin(version = "1.1")
|
|
public static boolean areEqual(Float f, Float f2) {
|
|
return f == null ? f2 == null : f2 != null && f.floatValue() == f2.floatValue();
|
|
}
|
|
|
|
@SinceKotlin(version = "1.1")
|
|
public static boolean areEqual(Float f, float f2) {
|
|
return f != null && f.floatValue() == f2;
|
|
}
|
|
|
|
@SinceKotlin(version = "1.1")
|
|
public static boolean areEqual(float f, Float f2) {
|
|
return f2 != null && f == f2.floatValue();
|
|
}
|
|
|
|
public static void checkFieldIsNotNull(Object obj, String str) {
|
|
if (obj == null) {
|
|
throw ((IllegalStateException) sanitizeStackTrace(new IllegalStateException(str)));
|
|
}
|
|
}
|
|
|
|
public static void checkReturnedValueIsNotNull(Object obj, String str) {
|
|
if (obj == null) {
|
|
throw ((IllegalStateException) sanitizeStackTrace(new IllegalStateException(str)));
|
|
}
|
|
}
|
|
|
|
public static void checkHasClass(String str, String str2) {
|
|
String replace = str.replace('/', '.');
|
|
try {
|
|
Class.forName(replace);
|
|
} catch (ClassNotFoundException e) {
|
|
throw ((ClassNotFoundException) sanitizeStackTrace(new ClassNotFoundException(android.support.v4.media.a.m("Class ", replace, " is not found: this code requires the Kotlin runtime of version at least ", str2), e)));
|
|
}
|
|
}
|
|
}
|