soul-browser/sources/java/kotlin/jvm/internal/Intrinsics.java
KaKi87 550ddb0413
Decompile and recreate Soul Browser v1.4.85 with APK CI builds (#1)
* 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>
2026-08-10 16:07:14 +02:00

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