soul-browser/sources/java/androidx/webkit/internal/WebViewFeatureInternal.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

187 lines
12 KiB
Java

package androidx.webkit.internal;
import android.content.pm.PackageInfo;
import android.os.Build;
import androidx.webkit.WebViewCompat;
import androidx.webkit.WebViewFeature;
import androidx.webkit.internal.ApiFeature;
import java.lang.reflect.InvocationTargetException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/* loaded from: classes.dex */
public class WebViewFeatureInternal {
/* renamed from: a, reason: collision with root package name */
public static final ApiFeature.N f1811a;
public static final ApiFeature.M b;
/* renamed from: c, reason: collision with root package name */
public static final ApiFeature.M f1812c;
public static final ApiFeature.O_MR1 d;
public static final ApiFeature.NoFramework e;
public static final ApiFeature.O f;
public static final ApiFeature.P g;
public static final ApiFeature.T h;
public static final ApiFeature.NoFramework i;
public static final ApiFeature.NoFramework j;
public static final ApiFeature.NoFramework k;
public static final ApiFeature.NoFramework l;
public static final ApiFeature.NoFramework m;
public static final ApiFeature.NoFramework n;
public static final ApiFeature.NoFramework o;
public static final ApiFeature.NoFramework p;
/* renamed from: androidx.webkit.internal.WebViewFeatureInternal$2, reason: invalid class name */
/* loaded from: classes.dex */
public class AnonymousClass2 extends ApiFeature.NoFramework {
@Override // androidx.webkit.internal.ApiFeature
public final boolean d() {
if (!super.d() || !WebViewFeature.a("MULTI_PROCESS")) {
return false;
}
boolean z = WebViewCompat.f1792a;
if (WebViewFeatureInternal.i.d()) {
return WebViewGlueCommunicator.c().getStatics().isMultiProcessEnabled();
}
throw WebViewFeatureInternal.a();
}
}
/* renamed from: androidx.webkit.internal.WebViewFeatureInternal$3, reason: invalid class name */
/* loaded from: classes.dex */
public class AnonymousClass3 extends ApiFeature.NoFramework {
@Override // androidx.webkit.internal.ApiFeature
public final boolean d() {
if (!WebViewFeature.a("MULTI_PROFILE")) {
return false;
}
return super.d();
}
}
/* JADX WARN: Type inference failed for: r0v10, types: [androidx.webkit.internal.ApiFeature$N, androidx.webkit.internal.ApiFeature] */
/* JADX WARN: Type inference failed for: r0v21, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$M] */
/* JADX WARN: Type inference failed for: r0v22, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$M] */
/* JADX WARN: Type inference failed for: r0v25, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$O_MR1] */
/* JADX WARN: Type inference failed for: r0v28, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
/* JADX WARN: Type inference failed for: r0v33, types: [androidx.webkit.internal.ApiFeature$O, androidx.webkit.internal.ApiFeature] */
/* JADX WARN: Type inference failed for: r0v37, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$P] */
/* JADX WARN: Type inference failed for: r0v44, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
/* JADX WARN: Type inference failed for: r0v47, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
/* JADX WARN: Type inference failed for: r0v48, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
/* JADX WARN: Type inference failed for: r0v50, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
/* JADX WARN: Type inference failed for: r0v55, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
/* JADX WARN: Type inference failed for: r0v58, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
/* JADX WARN: Type inference failed for: r0v62, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
/* JADX WARN: Type inference failed for: r0v70, types: [androidx.webkit.internal.ApiFeature, androidx.webkit.internal.ApiFeature$NoFramework] */
static {
new ApiFeature("VISUAL_STATE_CALLBACK", "VISUAL_STATE_CALLBACK");
new ApiFeature("OFF_SCREEN_PRERASTER", "OFF_SCREEN_PRERASTER");
new ApiFeature("SAFE_BROWSING_ENABLE", "SAFE_BROWSING_ENABLE");
new ApiFeature("DISABLED_ACTION_MODE_MENU_ITEMS", "DISABLED_ACTION_MODE_MENU_ITEMS");
new ApiFeature("START_SAFE_BROWSING", "START_SAFE_BROWSING");
new ApiFeature("SAFE_BROWSING_WHITELIST", "SAFE_BROWSING_WHITELIST");
new ApiFeature("SAFE_BROWSING_WHITELIST", "SAFE_BROWSING_ALLOWLIST");
new ApiFeature("SAFE_BROWSING_ALLOWLIST", "SAFE_BROWSING_WHITELIST");
new ApiFeature("SAFE_BROWSING_ALLOWLIST", "SAFE_BROWSING_ALLOWLIST");
new ApiFeature("SAFE_BROWSING_PRIVACY_POLICY_URL", "SAFE_BROWSING_PRIVACY_POLICY_URL");
f1811a = new ApiFeature("SERVICE_WORKER_BASIC_USAGE", "SERVICE_WORKER_BASIC_USAGE");
new ApiFeature("SERVICE_WORKER_CACHE_MODE", "SERVICE_WORKER_CACHE_MODE");
new ApiFeature("SERVICE_WORKER_CONTENT_ACCESS", "SERVICE_WORKER_CONTENT_ACCESS");
new ApiFeature("SERVICE_WORKER_FILE_ACCESS", "SERVICE_WORKER_FILE_ACCESS");
new ApiFeature("SERVICE_WORKER_BLOCK_NETWORK_LOADS", "SERVICE_WORKER_BLOCK_NETWORK_LOADS");
new ApiFeature("SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST", "SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST");
new ApiFeature("RECEIVE_WEB_RESOURCE_ERROR", "RECEIVE_WEB_RESOURCE_ERROR");
new ApiFeature("RECEIVE_HTTP_ERROR", "RECEIVE_HTTP_ERROR");
new ApiFeature("SHOULD_OVERRIDE_WITH_REDIRECTS", "SHOULD_OVERRIDE_WITH_REDIRECTS");
new ApiFeature("SAFE_BROWSING_HIT", "SAFE_BROWSING_HIT");
new ApiFeature("WEB_RESOURCE_REQUEST_IS_REDIRECT", "WEB_RESOURCE_REQUEST_IS_REDIRECT");
b = new ApiFeature("WEB_RESOURCE_ERROR_GET_DESCRIPTION", "WEB_RESOURCE_ERROR_GET_DESCRIPTION");
f1812c = new ApiFeature("WEB_RESOURCE_ERROR_GET_CODE", "WEB_RESOURCE_ERROR_GET_CODE");
new ApiFeature("SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY", "SAFE_BROWSING_RESPONSE_BACK_TO_SAFETY");
new ApiFeature("SAFE_BROWSING_RESPONSE_PROCEED", "SAFE_BROWSING_RESPONSE_PROCEED");
d = new ApiFeature("SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL", "SAFE_BROWSING_RESPONSE_SHOW_INTERSTITIAL");
new ApiFeature("WEB_MESSAGE_PORT_POST_MESSAGE", "WEB_MESSAGE_PORT_POST_MESSAGE");
new ApiFeature("WEB_MESSAGE_PORT_CLOSE", "WEB_MESSAGE_PORT_CLOSE");
e = new ApiFeature("WEB_MESSAGE_ARRAY_BUFFER", "WEB_MESSAGE_ARRAY_BUFFER");
new ApiFeature("WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK", "WEB_MESSAGE_PORT_SET_MESSAGE_CALLBACK");
new ApiFeature("CREATE_WEB_MESSAGE_CHANNEL", "CREATE_WEB_MESSAGE_CHANNEL");
new ApiFeature("POST_WEB_MESSAGE", "POST_WEB_MESSAGE");
new ApiFeature("WEB_MESSAGE_CALLBACK_ON_MESSAGE", "WEB_MESSAGE_CALLBACK_ON_MESSAGE");
f = new ApiFeature("GET_WEB_VIEW_CLIENT", "GET_WEB_VIEW_CLIENT");
new ApiFeature("GET_WEB_CHROME_CLIENT", "GET_WEB_CHROME_CLIENT");
new ApiFeature("GET_WEB_VIEW_RENDERER", "GET_WEB_VIEW_RENDERER");
new ApiFeature("WEB_VIEW_RENDERER_TERMINATE", "WEB_VIEW_RENDERER_TERMINATE");
g = new ApiFeature("TRACING_CONTROLLER_BASIC_USAGE", "TRACING_CONTROLLER_BASIC_USAGE");
new StartupApiFeature();
new StartupApiFeature();
new StartupApiFeature();
new ApiFeature("WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE", "WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE");
h = new ApiFeature.T() { // from class: androidx.webkit.internal.WebViewFeatureInternal.1
public final Pattern d = Pattern.compile("\\A\\d+");
@Override // androidx.webkit.internal.ApiFeature
public final boolean d() {
int i2;
PackageInfo packageInfo;
boolean d2 = super.d();
if (d2 && (i2 = Build.VERSION.SDK_INT) < 29) {
boolean z = WebViewCompat.f1792a;
if (i2 >= 26) {
packageInfo = ApiHelperForO.a();
} else {
try {
packageInfo = WebViewCompat.a();
} catch (ClassNotFoundException | IllegalAccessException | NoSuchMethodException | InvocationTargetException unused) {
packageInfo = null;
}
}
if (packageInfo == null) {
return false;
}
Matcher matcher = this.d.matcher(packageInfo.versionName);
if (!matcher.find() || Integer.parseInt(packageInfo.versionName.substring(matcher.start(), matcher.end())) < 105) {
return false;
}
return true;
}
return d2;
}
};
new ApiFeature("PROXY_OVERRIDE", "PROXY_OVERRIDE:3");
i = new ApiFeature("MULTI_PROCESS", "MULTI_PROCESS_QUERY");
new ApiFeature("FORCE_DARK", "FORCE_DARK");
new ApiFeature("FORCE_DARK_STRATEGY", "FORCE_DARK_BEHAVIOR");
j = new ApiFeature("WEB_MESSAGE_LISTENER", "WEB_MESSAGE_LISTENER");
k = new ApiFeature("DOCUMENT_START_SCRIPT", "DOCUMENT_START_SCRIPT:1");
new ApiFeature("PROXY_OVERRIDE_REVERSE_BYPASS", "PROXY_OVERRIDE_REVERSE_BYPASS");
l = new ApiFeature("GET_VARIATIONS_HEADER", "GET_VARIATIONS_HEADER");
new ApiFeature("ENTERPRISE_AUTHENTICATION_APP_LINK_POLICY", "ENTERPRISE_AUTHENTICATION_APP_LINK_POLICY");
new ApiFeature("GET_COOKIE_INFO", "GET_COOKIE_INFO");
new ApiFeature("REQUESTED_WITH_HEADER_ALLOW_LIST", "REQUESTED_WITH_HEADER_ALLOW_LIST");
new ApiFeature("USER_AGENT_METADATA", "USER_AGENT_METADATA");
m = new ApiFeature("MULTI_PROFILE", "MULTI_PROFILE");
new ApiFeature("ATTRIBUTION_REGISTRATION_BEHAVIOR", "ATTRIBUTION_BEHAVIOR");
new ApiFeature("WEBVIEW_MEDIA_INTEGRITY_API_STATUS", "WEBVIEW_INTEGRITY_API_STATUS");
n = new ApiFeature("MUTE_AUDIO", "MUTE_AUDIO");
new ApiFeature("WEB_AUTHENTICATION", "WEB_AUTHENTICATION");
new ApiFeature("SPECULATIVE_LOADING_STATUS", "SPECULATIVE_LOADING");
new ApiFeature("BACK_FORWARD_CACHE", "BACK_FORWARD_CACHE");
o = new ApiFeature("DELETE_BROWSING_DATA", "WEB_STORAGE_DELETE_BROWSING_DATA");
new ApiFeature("PREFETCH_URL_V4", "PREFETCH_URL_V4");
new ApiFeature("IMPLEMENTATION_ONLY_FEATURE", "ASYNC_WEBVIEW_STARTUP");
new ApiFeature("DEFAULT_TRAFFICSTATS_TAGGING", "DEFAULT_TRAFFICSTATS_TAGGING");
new ApiFeature("PRERENDER_URL_V2", "PRERENDER_URL_V2");
new ApiFeature("SPECULATIVE_LOADING_CONFIG_V2", "SPECULATIVE_LOADING_CONFIG_V2");
new ApiFeature("SAVE_STATE", "SAVE_STATE");
new ApiFeature("WEB_VIEW_NAVIGATION_CLIENT_BASIC_USAGE", "WEB_VIEW_NAVIGATION_CLIENT_BASIC_USAGE");
p = new ApiFeature("CACHE_PROVIDER", "PROVIDER_WEAKLY_REF_WEBVIEW");
new ApiFeature("PAYMENT_REQUEST", "PAYMENT_REQUEST");
new ApiFeature("WEBVIEW_BUILDER", "WEBVIEW_BUILDER");
}
public static UnsupportedOperationException a() {
return new UnsupportedOperationException("This method is not supported by the current version of the framework and the current WebView APK");
}
}