* 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>
86 lines
4.8 KiB
Java
86 lines
4.8 KiB
Java
package com.google.android.gms.internal.ads;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Rect;
|
|
import android.os.PowerManager;
|
|
import android.text.TextUtils;
|
|
import android.util.DisplayMetrics;
|
|
import java.util.List;
|
|
import org.json.JSONArray;
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class zzcrt implements zzbry {
|
|
|
|
/* renamed from: a, reason: collision with root package name */
|
|
public final Context f5414a;
|
|
public final zzbch b;
|
|
|
|
/* renamed from: c, reason: collision with root package name */
|
|
public final PowerManager f5415c;
|
|
|
|
public zzcrt(Context context, zzbch zzbchVar) {
|
|
this.f5414a = context;
|
|
this.b = zzbchVar;
|
|
this.f5415c = (PowerManager) context.getSystemService("power");
|
|
}
|
|
|
|
@Override // com.google.android.gms.internal.ads.zzbry
|
|
/* renamed from: b, reason: merged with bridge method [inline-methods] */
|
|
public final JSONObject a(zzcrw zzcrwVar) {
|
|
JSONObject jSONObject;
|
|
JSONArray jSONArray = new JSONArray();
|
|
JSONObject jSONObject2 = new JSONObject();
|
|
zzbcj zzbcjVar = zzcrwVar.e;
|
|
if (zzbcjVar == null) {
|
|
jSONObject = new JSONObject();
|
|
} else {
|
|
zzbch zzbchVar = this.b;
|
|
if (zzbchVar.b != null) {
|
|
boolean z = zzbcjVar.f4543a;
|
|
JSONObject jSONObject3 = new JSONObject();
|
|
JSONObject put = jSONObject3.put("afmaVersion", zzbchVar.d).put("activeViewJSON", zzbchVar.b).put("timestamp", zzcrwVar.f5419c).put("adFormat", zzbchVar.f4540a).put("hashCode", zzbchVar.f4541c).put("isMraid", false).put("isStopped", false).put("isPaused", zzcrwVar.b).put("isNative", zzbchVar.e).put("isScreenOn", this.f5415c.isInteractive()).put("appMuted", com.google.android.gms.ads.internal.zzt.zzi().zzd()).put("appVolume", com.google.android.gms.ads.internal.zzt.zzi().zzb());
|
|
Context context = this.f5414a;
|
|
put.put("deviceVolume", com.google.android.gms.ads.internal.util.zzaa.zze(context.getApplicationContext()));
|
|
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
|
|
JSONObject put2 = jSONObject3.put("windowVisibility", zzbcjVar.b).put("isAttachedToWindow", z);
|
|
JSONObject jSONObject4 = new JSONObject();
|
|
Rect rect = zzbcjVar.f4544c;
|
|
JSONObject put3 = put2.put("viewBox", jSONObject4.put("top", rect.top).put("bottom", rect.bottom).put("left", rect.left).put("right", rect.right));
|
|
JSONObject jSONObject5 = new JSONObject();
|
|
Rect rect2 = zzbcjVar.d;
|
|
JSONObject put4 = put3.put("adBox", jSONObject5.put("top", rect2.top).put("bottom", rect2.bottom).put("left", rect2.left).put("right", rect2.right));
|
|
JSONObject jSONObject6 = new JSONObject();
|
|
Rect rect3 = zzbcjVar.e;
|
|
JSONObject put5 = put4.put("globalVisibleBox", jSONObject6.put("top", rect3.top).put("bottom", rect3.bottom).put("left", rect3.left).put("right", rect3.right)).put("globalVisibleBoxVisible", zzbcjVar.f);
|
|
JSONObject jSONObject7 = new JSONObject();
|
|
Rect rect4 = zzbcjVar.g;
|
|
JSONObject put6 = put5.put("localVisibleBox", jSONObject7.put("top", rect4.top).put("bottom", rect4.bottom).put("left", rect4.left).put("right", rect4.right)).put("localVisibleBoxVisible", zzbcjVar.h);
|
|
JSONObject jSONObject8 = new JSONObject();
|
|
Rect rect5 = zzbcjVar.i;
|
|
put6.put("hitBox", jSONObject8.put("top", rect5.top).put("bottom", rect5.bottom).put("left", rect5.left).put("right", rect5.right)).put("screenDensity", displayMetrics.density);
|
|
jSONObject3.put("isVisible", zzcrwVar.f5418a);
|
|
if (((Boolean) com.google.android.gms.ads.internal.client.zzbd.zzc().a(zzbgk.U1)).booleanValue()) {
|
|
JSONArray jSONArray2 = new JSONArray();
|
|
List<Rect> list = zzbcjVar.k;
|
|
if (list != null) {
|
|
for (Rect rect6 : list) {
|
|
jSONArray2.put(new JSONObject().put("top", rect6.top).put("bottom", rect6.bottom).put("left", rect6.left).put("right", rect6.right));
|
|
}
|
|
}
|
|
jSONObject3.put("scrollableContainerBoxes", jSONArray2);
|
|
}
|
|
if (!TextUtils.isEmpty(zzcrwVar.d)) {
|
|
jSONObject3.put("doneReasonCode", "u");
|
|
}
|
|
jSONObject = jSONObject3;
|
|
} else {
|
|
throw new JSONException("Active view Info cannot be null.");
|
|
}
|
|
}
|
|
jSONArray.put(jSONObject);
|
|
jSONObject2.put("units", jSONArray);
|
|
return jSONObject2;
|
|
}
|
|
}
|