* 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>
158 lines
5.4 KiB
Java
158 lines
5.4 KiB
Java
package androidx.biometric;
|
|
|
|
import android.app.KeyguardManager;
|
|
import android.content.Context;
|
|
import android.hardware.fingerprint.FingerprintManager;
|
|
import android.os.Build;
|
|
import android.util.Log;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.annotation.VisibleForTesting;
|
|
import androidx.biometric.KeyguardUtils;
|
|
import androidx.biometric.PackageUtils;
|
|
import androidx.core.hardware.fingerprint.FingerprintManagerCompat;
|
|
import kotlin.KotlinVersion;
|
|
|
|
/* loaded from: classes.dex */
|
|
public class BiometricManager {
|
|
|
|
/* renamed from: a, reason: collision with root package name */
|
|
public final DefaultInjector f387a;
|
|
public final android.hardware.biometrics.BiometricManager b;
|
|
|
|
/* renamed from: c, reason: collision with root package name */
|
|
public final FingerprintManagerCompat f388c;
|
|
|
|
@RequiresApi
|
|
/* loaded from: classes.dex */
|
|
public static class Api29Impl {
|
|
public static int a(@NonNull android.hardware.biometrics.BiometricManager biometricManager) {
|
|
return biometricManager.canAuthenticate();
|
|
}
|
|
|
|
@Nullable
|
|
public static android.hardware.biometrics.BiometricManager b(@NonNull Context context) {
|
|
return (android.hardware.biometrics.BiometricManager) context.getSystemService(android.hardware.biometrics.BiometricManager.class);
|
|
}
|
|
}
|
|
|
|
@RequiresApi
|
|
/* loaded from: classes.dex */
|
|
public static class Api30Impl {
|
|
public static int a(@NonNull android.hardware.biometrics.BiometricManager biometricManager, int i) {
|
|
return biometricManager.canAuthenticate(i);
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
public interface Authenticators {
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
public static class DefaultInjector implements Injector {
|
|
|
|
/* renamed from: a, reason: collision with root package name */
|
|
public final Context f389a;
|
|
|
|
public DefaultInjector(Context context) {
|
|
this.f389a = context.getApplicationContext();
|
|
}
|
|
|
|
public final boolean a() {
|
|
KeyguardManager a2 = KeyguardUtils.Api23Impl.a(this.f389a);
|
|
if (a2 == null) {
|
|
return false;
|
|
}
|
|
return KeyguardUtils.Api23Impl.b(a2);
|
|
}
|
|
}
|
|
|
|
@VisibleForTesting
|
|
/* loaded from: classes.dex */
|
|
public interface Injector {
|
|
}
|
|
|
|
public BiometricManager(DefaultInjector defaultInjector) {
|
|
android.hardware.biometrics.BiometricManager biometricManager;
|
|
Context context = defaultInjector.f389a;
|
|
this.f387a = defaultInjector;
|
|
int i = Build.VERSION.SDK_INT;
|
|
if (i >= 29) {
|
|
biometricManager = Api29Impl.b(context);
|
|
} else {
|
|
biometricManager = null;
|
|
}
|
|
this.b = biometricManager;
|
|
this.f388c = i <= 29 ? new FingerprintManagerCompat(context) : null;
|
|
}
|
|
|
|
public static BiometricManager c(Context context) {
|
|
return new BiometricManager(new DefaultInjector(context));
|
|
}
|
|
|
|
public final int a() {
|
|
int i = Build.VERSION.SDK_INT;
|
|
if (i >= 30) {
|
|
android.hardware.biometrics.BiometricManager biometricManager = this.b;
|
|
if (biometricManager == null) {
|
|
Log.e("BiometricManager", "Failure in canAuthenticate(). BiometricManager was null.");
|
|
return 1;
|
|
}
|
|
return Api30Impl.a(biometricManager, KotlinVersion.MAX_COMPONENT_VALUE);
|
|
}
|
|
DefaultInjector defaultInjector = this.f387a;
|
|
Context context = defaultInjector.f389a;
|
|
if (!AuthenticatorUtils.b(KotlinVersion.MAX_COMPONENT_VALUE)) {
|
|
return -2;
|
|
}
|
|
if (KeyguardUtils.Api23Impl.a(context) == null) {
|
|
return 12;
|
|
}
|
|
if (AuthenticatorUtils.a(KotlinVersion.MAX_COMPONENT_VALUE)) {
|
|
if (defaultInjector.a()) {
|
|
return 0;
|
|
}
|
|
return 11;
|
|
}
|
|
if (i == 29) {
|
|
android.hardware.biometrics.BiometricManager biometricManager2 = this.b;
|
|
if (biometricManager2 == null) {
|
|
Log.e("BiometricManager", "Failure in canAuthenticate(). BiometricManager was null.");
|
|
return 1;
|
|
}
|
|
return Api29Impl.a(biometricManager2);
|
|
}
|
|
if (i == 28) {
|
|
if (context == null || context.getPackageManager() == null || !PackageUtils.Api23Impl.a(context.getPackageManager())) {
|
|
return 12;
|
|
}
|
|
if (!defaultInjector.a()) {
|
|
return b();
|
|
}
|
|
if (b() == 0) {
|
|
return 0;
|
|
}
|
|
return -1;
|
|
}
|
|
return b();
|
|
}
|
|
|
|
public final int b() {
|
|
FingerprintManagerCompat fingerprintManagerCompat = this.f388c;
|
|
if (fingerprintManagerCompat == null) {
|
|
Log.e("BiometricManager", "Failure in canAuthenticate(). FingerprintManager was null.");
|
|
return 1;
|
|
}
|
|
Context context = fingerprintManagerCompat.f696a;
|
|
FingerprintManager b = FingerprintManagerCompat.b(context);
|
|
if (b != null && b.isHardwareDetected()) {
|
|
FingerprintManager b2 = FingerprintManagerCompat.b(context);
|
|
if (b2 != null && b2.hasEnrolledFingerprints()) {
|
|
return 0;
|
|
}
|
|
return 11;
|
|
}
|
|
return 12;
|
|
}
|
|
}
|