宽表格和代码可左右滑动查看。
EasyClean v1.0.2 保活与拉活反编译代码册#
精确包名:com.smartnettools.studio.easyclean;样本及资料日期:2026-10-28,Asia/Shanghai(北京时间)。六专题补充版。
S1=当前APK静态直接证据;S2=工具回读;S3=当前真机观察;I=推断;U=未验证。反编译不是原始源码,内置配置不是线上最终配置。发布状态单独记录于批次入口。
机制总图#
App初始化 → 持久Job2001(15分钟最小周期) → Mb.b.a统一资格检查 → 12组配对模板 → 循环1234起ID → SplashActivity。
FCM的show_local_message也进入统一资格检查;通知删除Receiver直接进入重建分支,绕开主检查中的时段/未活跃门禁,但仍有删除重建间隔。主页初始化cancelAll属于第三条通知消失路径。
按执行顺序读主链#
| 阶段 | 入口/下游 | 条件与状态说明 | 证据 |
|---|---|---|---|
| 文件功能 | 权限基类 → Activity.I → ViewModel扫描 | 10MiB参数和UI进度不证明真实删除效果 | N1–N4 |
| 结果商业化 | 完成页 → clean-result全屏尝试+原生容器 | 与SpecialAdControl的snake_case键不能直接合并 | N6 |
| 普通召回 | Job/FCM → Mb.b.a → 构建 → 循环ID | 时段/活跃/间隔决定资格,系统可见另验 | 原A2–A10 |
| 删除后重建 | LocalNotificationReceiver → 直接构建分支 | 不是所有入口都经过同一资格函数 | 原A9 |
| 主页回流 | MainActivity.s → cancelAll | 本包通知可能被主页主动清掉 | N5 |
调用关系与业务含义#
主清理产品有31个业务Activity,另集成Launcher3。照片/视频压缩分别有选择、配置和结果页面;大文件、重复文件、相似照片、截图清理继承共享文件权限流程;使用记录、少用应用、存储、Wi-Fi和测速是另一些工具,不应压成一行“支持清理”。
大文件链已追到BigFileActivity.I → C0851c → C0850b → C0852d.a → m3.m.b,传入10485760字节(10MiB)的扫描阈值。外层Y0.e.l会补足到至少3000ms的展示时长,不是3秒扫描超时;任务返回后写进度100,内部以候选处理数计算0–99。100%的UI进度不能独立证明所有文件完整扫描或删除。[N1–N3/N7]
NeedFilePermissionActivity在Android30+核Environment.isExternalStorageManager,并以MANAGE_APP_ALL_FILES_ACCESS_PERMISSION跳系统设置。不同工具的返回分支不相同,拒绝权限不能统一描述为继续清理。MainActivity初始化会cancelAll本包通知,回到主页后通知消失也不能独立认定召回从未展示。[N4/N5]
通知条件必须按入口区分。周期/FCM主链默认7–21时、24小时未活跃、4小时间隔、不在前台;删除重建默认至少60秒。活跃写回自身有15分钟节流,不等于每次切前台都立即更新。
12组标题与正文使用同一随机索引,两个按钮复用同一Splash PendingIntent,不能把Later写成后台延期任务。上层可能在构建返回null时仍写回lastNotify,故“资格满足”“notify调用”“系统可见”三层分别验证。
控制流复核与广告调度边界#
广告场景开关与来源位已在综合分析恢复,本轮把它们放回产品路径:结果页CompleteActivity同时尝试clean-result全屏路径和同名原生容器;是否有缓存、Activity是否已销毁/结束分别判断。配置中的scan_result和代码调用的clean-result不是天然同一个键,必须通过具体包装层才能对应,不能仅凭名字近似合并。[N6]
七个SpecialAdControl场景是特定门禁集合,不是全App所有广告位全集。Thinkup与MAX的加载节流分别存在;加载间隔不等于展示频控。结果页默认桌面引导是产品推广行为,不能并入杀毒结果或广告展示证明。
代码保留混淆名与工具错误标记。A编号沿用已核证据,N编号为本轮新增回查;simple输出是独立指令阅读副本,不能用文件存在/退出码0替代方法语义核验。
原有代码锚点 A#
| 编号 | 证明内容 | 本地源位置 | 核验 |
|---|---|---|---|
| A1 | Adjust 与 Referrer 初始化 | jadx-repair/sources/com/fubian/cleaner/App.java:280–325 |
已回读 |
| A2 | 通知初始化、订阅、Job2001 | jadx-repair/sources/com/fubian/cleaner/App.java:570–617 |
已回读 |
| A3 | 周期Job回调 | jadx-repair/sources/T6MB1ZG64oyYB3335SxFg9s40zP0/z3XPSFr78q907eH19Mj.java:8–18 |
已回读 |
| A4 | FCM本地展示指令 | jadx-repair/sources/T6MB1ZG64oyYB3335SxFg9s40zP0/DDSQWC66.java:18–62 |
已回读 |
| A5 | 默认门禁参数 | jadx-repair/sources/Y0/j.java:29–43 |
已回读 |
| A6 | 远端覆盖与通知构建 | jadx-repair/sources/Mb/d.java:30–58 |
已回读 |
| A7 | 活跃时间节流、模板随机和两个按钮 | jadx-repair/sources/Mb/a.java:44–64 |
已回读 |
| A8 | 时段、活跃时间与通知间隔 | jadx-repair/sources/Mb/b.java:25–45 |
已回读 |
| A9 | 删除重建入口 | jadx-repair/sources/T6MB1ZG64oyYB3335SxFg9s40zP0/T6MB1ZG64oyYB3335SxFg9s40zP0.java:19–33 |
已回读 |
| A10 | 循环通知ID及实际notify | jadx-repair/sources/o5/z.java:45–62 |
已回读 |
| A11 | Adjust来源标记与可疑状态 | jadx-repair/sources/C4/c.java:30–53 |
已回读 |
| A12 | Referrer字符串规则及次数写回 | jadx-repair/sources/e6/e.java:55–67 |
已回读 |
| A13 | 来源位按位或并持久化 | jadx-repair/sources/Kb/h.java:18–30 |
已回读 |
| A14 | 来源标记实际业务判断 | jadx-repair/sources/N5/b.java:102–109 |
已回读 |
| A15 | 七个广告场景及分组门禁 | jadx-repair/sources/Y2/AbstractC8138a.java:15–78 |
已回读 |
| A16 | 默认字段及构造器指令;含反编译错误边界 | jadx-repair/sources/com/fubian/cleaner/ad/SpecialAdControl.java:116–217 |
已回读 |
| A17 | Thinkup加载、展示与节流 | jadx-repair/sources/E8/C5876f.java:74–140 |
已回读 |
| A18 | MAX开屏/原生/插屏加载节流 | jadx-repair/sources/E8/C5877g.java:146–221 |
已回读 |
| A19 | 展示失败后的提供方回退 | jadx-repair/sources/N5/b.java:121–142 |
已回读 |
| A20 | 提供方选择器simple指令复核 | analysis/simple/c/a.java:59–220 |
已回读 |
| A21 | 来源条件与默认桌面引导 | jadx-repair/sources/com/fubian/cleaner/result/ResultActivity.java:86–119 |
已回读 |
本轮补充代码锚点 N#
| 编号 | 证明内容 | 本地源位置 | 核验 |
|---|---|---|---|
| N1 | 大文件入口实际发起扫描任务 | jadx-repair/sources/com/fubian/cleaner/compressor/BigFileActivity.java:131–136 |
已回读 |
| N2 | 3000ms包装及最终进度100 | jadx-repair/sources/K2/C0851c.java:35–53 |
已回读 |
| N3 | 10MiB候选扫描和类型/大小读取 | jadx-repair/sources/K2/C0852d.java:65–109 |
已回读 |
| N4 | 文件权限、系统设置与工具返回分支 | jadx-repair/sources/com/fubian/cleaner/compressor/NeedFilePermissionActivity.java:95–195 |
已回读 |
| N5 | 主页初始化cancelAll和回调调度 | jadx-repair/sources/com/fubian/cleaner/main/MainActivity.java:196–213 |
已回读 |
| N6 | 同一结果页的全屏与原生调用 | jadx-repair/sources/com/fubian/cleaner/result/CompleteActivity.java:89–94 |
已回读 |
| N7 | 扫描包装补足最短展示时长,非超时 | jadx-repair/sources/Y0/e.java:165–215 |
已回读 |
便于开发阅读的等价逻辑#
以下使用语义名称重述已核对控制流,不是竞品原始源码;它与A/N原位置配合阅读。尚未闭合的下游保留抽象调用,不填造执行结果。
// 文件权限基类及大文件任务的等价语义
if (androidVersion >= 30 && !isExternalStorageManager()) {
showPermissionExplanation()
return
}
started = nowMillis
result = runBigFileTaskBody(minBytes = 10485760)
delay(max(0, 3000 - (nowMillis - started))) // 至少显示3秒,不是3秒超时
progress.post(100)
// 普通召回:Job和show_local_message FCM共同进入
if (!open || foregroundDisallowed || hourOutside7To21) return
if (sinceActiveSec < 86400 || sinceNotifySec < 14400) return
pickPairedTitleAndBodyByOneIndex()
buildAndNotifyWithRotatingId()
// 删除重建Receiver另走入口;不把上述门禁套到所有入口
// MainActivity初始化还会cancelAll本包通知
一方后台与通知关键实现#
A1 · Adjust 与 Referrer 初始化#
位置:com/fubian/cleaner/App.java:280–325。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
if (!z3 && !z3) {
hVar.f1997a = aVar4.f1988a.getInt("user_source", 0);
hVar.b = true;
}
if (hVar.f1997a <= 0) {
adjustConfig.enableSendingInBackground();
}
}
adjustConfig.setOnAttributionChangedListener(new c(cVar, 12));
String strH2 = "user_id";
String string2 = aVar4.f1988a.getString("user_id", null);
if (string2 == null) {
string2 = UUID.randomUUID().toString();
aVar4.b("user_id", string2);
}
Adjust.addGlobalCallbackParameter(strH2, string2);
Adjust.addGlobalCallbackParameter("register_time", Y0.e.e());
Adjust.addGlobalCallbackParameter("appstore", AbstractC5937a.f33633a);
Adjust.initSdk(adjustConfig);
Adjust.getGoogleAdId(app2, new o8.e(cVar, i7));
Adjust.getAdid(new OnAdidReadListener() { // from class: oa.a
@Override // com.adjust.sdk.OnAdidReadListener
public final void onAdidRead(String str6) {
cVar.getClass();
}
});
Adjust.getAttribution(new C7413b());
cVar.b();
if (aVar4.f1988a.getString("attr_network", null) == null) {
boolean z6 = hVar.b;
if (!z6 && !z6) {
hVar.f1997a = aVar4.f1988a.getInt("user_source", 0);
hVar.b = true;
}
if (hVar.f1997a <= 0) {
new Handler(Looper.getMainLooper()).postDelayed(new A6.b(14), 500L);
}
}
int i11 = aVar.f1988a.getInt("install_referrer_cnt", 0);
if (i11 < 10) {
aVar.a(i11 + 1, "install_referrer_cnt");
e6.e eVar = new e6.e(i7);
InstallReferrerClient installReferrerClientBuild = InstallReferrerClient.newBuilder(AbstractC7472h.f40480a).build();
installReferrerClientBuild.startConnection(new C0796f(installReferrerClientBuild, eVar, 17));
}
Kb.f fVar = Kb.f.f1993c;
A2 · 通知初始化、订阅、Job2001#
位置:com/fubian/cleaner/App.java:570–617。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
FirebaseMessaging firebaseMessagingC = FirebaseMessaging.c();
firebaseMessagingC.getClass();
firebaseMessagingC.i.onSuccessTask(new androidx.constraintlayout.core.state.a("default_topic", 1));
NotificationChannel notificationChannel = new NotificationChannel(getString(R$string.message_channel), getString(R$string.message_channel), 4);
notificationChannel.setDescription("firebase notification channel");
NotificationChannel notificationChannel2 = new NotificationChannel(getString(R$string.local_message_channel), getString(R$string.local_message_channel), 3);
notificationChannel2.setDescription("local notification channel");
NotificationManager notificationManager = (NotificationManager) getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(notificationChannel);
notificationManager.createNotificationChannel(notificationChannel2);
Mb.a aVar5 = new Mb.a(this, 1);
if (r0.a(this)) {
d.b = LocalNotificationReceiver.class;
d.f14064c = NotificationJobService.class;
String str6 = DDSQWC66.f6741j;
try {
FirebaseMessaging firebaseMessagingC2 = FirebaseMessaging.c();
String str7 = DDSQWC66.f6743l;
firebaseMessagingC2.getClass();
firebaseMessagingC2.i.onSuccessTask(new androidx.constraintlayout.core.state.a(str7, 1));
} catch (Throwable unused4) {
}
int i17 = 13;
N5.b.c(new A6.b(i17));
new Handler(Looper.getMainLooper()).post(new A6.b(i17));
Mb.d dVar = Mb.d.d;
dVar.f2489a = aVar5;
Mb.d.b();
N5.b.c(new Mb.c(dVar, 0));
String str8 = Mb.d.b;
String str9 = Mb.d.f2488c;
NotificationChannel notificationChannel3 = new NotificationChannel(str8, str9, 4);
notificationChannel3.setDescription(str9);
notificationChannel3.setLockscreenVisibility(1);
((NotificationManager) getSystemService(NotificationManager.class)).createNotificationChannel(notificationChannel3);
Mb.b bVar = Mb.b.b;
JobScheduler jobScheduler = (JobScheduler) getSystemService("jobscheduler");
if (jobScheduler != null) {
jobScheduler.cancel(2001);
i = 0;
JobInfo.Builder periodic = new JobInfo.Builder(2001, new ComponentName(this, (Class<?>) d.f14064c)).setRequiredNetworkType(0).setRequiresCharging(false).setRequiresDeviceIdle(false).setPersisted(true).setPeriodic(PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS);
periodic.setRequiresBatteryNotLow(false);
jobScheduler.schedule(periodic.build());
} else {
i = 0;
}
AbstractC7162a.f39501c.add(new Mb.a(this, i));
}
A3 · 周期Job回调#
位置:T6MB1ZG64oyYB3335SxFg9s40zP0/z3XPSFr78q907eH19Mj.java:8–18。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public abstract class z3XPSFr78q907eH19Mj extends JobService {
@Override // android.app.job.JobService
public final boolean onStartJob(JobParameters jobParameters) {
b.a(getApplicationContext());
return false;
}
@Override // android.app.job.JobService
public final boolean onStopJob(JobParameters jobParameters) {
return true;
}
A4 · FCM本地展示指令#
位置:T6MB1ZG64oyYB3335SxFg9s40zP0/DDSQWC66.java:18–62。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
/* JADX INFO: renamed from: j, reason: collision with root package name */
public static final String f6741j = "messageType";
/* JADX INFO: renamed from: k, reason: collision with root package name */
public static final String f6742k = "show_local_message";
/* JADX INFO: renamed from: l, reason: collision with root package name */
public static final String f6743l = "default_topic";
/* JADX INFO: renamed from: m, reason: collision with root package name */
public static final String f6744m = "special_firebase_topics";
public static String n;
public static void i() {
String str = (String) b.e(String.class, f6744m, "");
if (str == null) {
str = "";
}
if (Objects.equals(n, str)) {
return;
}
String strTrim = str.trim();
if (strTrim.isEmpty()) {
return;
}
try {
JSONArray jSONArray = new JSONArray(strTrim);
n = str;
FirebaseMessaging firebaseMessagingC = FirebaseMessaging.c();
for (int i = 0; i < jSONArray.length(); i++) {
String strTrim2 = jSONArray.optString(i, "").trim();
if (!strTrim2.isEmpty()) {
firebaseMessagingC.getClass();
firebaseMessagingC.i.onSuccessTask(new a(strTrim2, 1));
}
}
} catch (JSONException unused) {
}
}
@Override // com.google.firebase.messaging.FirebaseMessagingService
public final void e(RemoteMessage remoteMessage) {
if (f6742k.equals(((HashMap) remoteMessage.getData()).get(f6741j))) {
Mb.b.a(getApplicationContext());
}
A5 · 默认门禁参数#
位置:Y0/j.java:29–43。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
/* JADX INFO: renamed from: a, reason: collision with root package name */
public static boolean f7514a = true;
public static int b = 7;
/* JADX INFO: renamed from: c, reason: collision with root package name */
public static int f7515c = 21;
public static int d = 14400;
public static boolean e = true;
public static int f = 60;
public static int g = 3;
public static int h = 86400;
public static boolean i = false;
/* JADX INFO: renamed from: j, reason: collision with root package name */
public static int f7516j;
A6 · 远端覆盖与通知构建#
位置:Mb/d.java:30–58。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public static void b() {
String strF = q6.c.d().f("notification_config");
if (strF.isEmpty()) {
return;
}
try {
JSONObject jSONObject = new JSONObject(strF);
j.f7514a = jSONObject.optBoolean("open", j.f7514a);
j.b = jSONObject.optInt("startHour", j.b);
j.f7515c = jSONObject.optInt("endHour", j.f7515c);
j.d = jSONObject.optInt("intervalSec", j.d);
j.e = jSONObject.optBoolean("createAfterClear", j.e);
j.f = jSONObject.optInt("createAfterClearSec", j.f);
j.g = jSONObject.optInt("noticationIdCnt", j.g);
j.g = jSONObject.optInt("notificationIdCnt", j.g);
j.h = jSONObject.optInt("lastActiveSec", j.h);
j.i = jSONObject.optBoolean("showInForeground", j.i);
j.f7516j = jSONObject.optInt("notificationType", j.f7516j);
} catch (Exception unused) {
}
}
public final Notification a(Context context) {
if (this.f2489a == null) {
return null;
}
NotificationCompat.Builder visibility = new NotificationCompat.Builder(context, b).setPriority(2).setAutoCancel(true).setDeleteIntent(PendingIntent.getBroadcast(context, 1111, new Intent(context, (Class<?>) com.bumptech.glide.d.b), 201326592)).setVisibility(1);
this.f2489a.accept(Pair.create(visibility, Integer.valueOf(j.f7516j)));
return visibility.build();
A7 · 活跃时间节流、模板随机和两个按钮#
位置:Mb/a.java:44–64。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
case 0:
b bVar = b.b;
long jCurrentTimeMillis = System.currentTimeMillis();
if (jCurrentTimeMillis - bVar.f2486a >= PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS) {
bVar.f2486a = jCurrentTimeMillis;
PreferenceManager.getDefaultSharedPreferences(this.f2485c).edit().putLong("MX_LAST_ACTIVE_TIME", System.currentTimeMillis()).apply();
break;
}
break;
default:
Object first = ((Pair) obj).first;
AbstractC7249t.i(first, "first");
App app = this.f2485c;
int iNextInt = new Random().nextInt(app.getResources().getStringArray(R$array.message_title).length);
String str = app.getResources().getStringArray(R$array.message_title)[iNextInt];
String str2 = app.getResources().getStringArray(R$array.message_content)[iNextInt];
Intent intent = new Intent(app, (Class<?>) SplashActivity.class);
intent.putExtra("fromNotification", true);
PendingIntent activity = PendingIntent.getActivity(app, 0, intent, 67108864);
AbstractC7249t.i(((NotificationCompat.Builder) first).setSmallIcon(R$drawable.logo_notice).setContentIntent(activity).setDeleteIntent(PendingIntent.getBroadcast(app, 0, new Intent(app, (Class<?>) LocalNotificationReceiver.class), 201326592)).addAction(0, app.getString(R$string.notification_scan_now), activity).addAction(0, app.getString(R$string.notification_later), activity).setContentTitle(str).setContentText(str2).setAutoCancel(true).setNumber(1).setPriority(2), "setPriority(...)");
break;
A8 · 时段、活跃时间与通知间隔#
位置:Mb/b.java:25–45。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public static void a(Context context) {
Context applicationContext = context.getApplicationContext();
if ((AbstractC7162a.b <= 0 || j.i) && j.f7514a) {
int i = Calendar.getInstance().get(11);
int i7 = j.b;
int i10 = j.f7515c;
if (i < i7 || i > i10) {
return;
}
int i11 = j.h;
if (i11 > 0) {
long j10 = PreferenceManager.getDefaultSharedPreferences(context).getLong("MX_LAST_ACTIVE_TIME", 0L);
if (j10 > 0 && System.currentTimeMillis() - j10 < ((long) i11) * 1000) {
return;
}
}
if (System.currentTimeMillis() - PreferenceManager.getDefaultSharedPreferences(context).getLong("MX_LAST_NOTIFICATION_TIME", 0L) >= ((long) j.d) * 1000) {
z.a(applicationContext);
PreferenceManager.getDefaultSharedPreferences(context).edit().putLong("MX_LAST_NOTIFICATION_TIME", System.currentTimeMillis()).apply();
}
}
A9 · 删除重建入口#
位置:T6MB1ZG64oyYB3335SxFg9s40zP0/T6MB1ZG64oyYB3335SxFg9s40zP0.java:19–33。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
@Override // android.content.BroadcastReceiver
public final void onReceive(Context context, Intent intent) {
if (j.e) {
int i = j.f;
long jCurrentTimeMillis = System.currentTimeMillis();
if (i <= 0 || jCurrentTimeMillis - f6745a >= ((long) i) * 1000) {
z.a(context);
b bVar = b.b;
PreferenceManager.getDefaultSharedPreferences(context).edit().putLong("MX_LAST_NOTIFICATION_TIME", System.currentTimeMillis()).apply();
if (i > 0) {
f6745a = jCurrentTimeMillis;
}
}
}
}
A10 · 循环通知ID及实际notify#
位置:o5/z.java:45–62。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public static void a(Context context) {
NotificationManager notificationManager;
try {
int i = Y0.j.g;
if (i < 1) {
i = 1;
}
int i7 = f40319c;
f40319c = (i7 + 1) % i;
int i10 = i7 + 1234;
Notification notificationA = Mb.d.d.a(context);
if (notificationA == null || (notificationManager = (NotificationManager) context.getSystemService("notification")) == null) {
return;
}
notificationManager.notify(i10, notificationA);
} catch (Exception unused) {
}
}
A11 · Adjust来源标记与可疑状态#
位置:C4/c.java:30–53。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public static void c(AdjustAttribution adjustAttribution) {
String str;
if (adjustAttribution == null || (str = adjustAttribution.network) == null) {
return;
}
String lowerCase = str.toLowerCase(Locale.US);
Kb.a aVar = Kb.a.b;
aVar.b("attr_network", lowerCase);
if (lowerCase.contains("untrusted")) {
n nVar = n.b;
if (!nVar.f2006a) {
nVar.f2006a = true;
}
aVar.a(1, "is_suspect");
return;
}
if (lowerCase.contains("organic")) {
return;
}
Kb.h hVar = Kb.h.d;
if ((hVar.f1997a & 16) == 0) {
hVar.a(16);
}
}
A12 · Referrer字符串规则及次数写回#
位置:e6/e.java:55–67。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public static void n(String str) {
Kb.h hVar = Kb.h.d;
hVar.getClass();
if (str != null) {
if (str.contains("tiktok_s") || str.contains("paid_traffic_s") || str.contains("singular") || str.contains("adjust")) {
hVar.a(1);
} else if (str.contains("utm_content") && str.contains("app") && str.contains("source") && str.contains("data") && str.contains("nonce")) {
hVar.a(1);
} else if (str.contains("gclid") && str.contains("gbraid") && str.contains("gad_source")) {
hVar.a(1);
}
}
Kb.a.b.a(10, "install_referrer_cnt");
A13 · 来源位按位或并持久化#
位置:Kb/h.java:18–30。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public final synchronized void a(int i) {
int i7 = this.f1997a;
boolean z = i7 == 0;
this.f1997a = i | i7;
a.b.a(this.f1997a, "user_source");
if (z && this.f1997a > 0) {
Bundle bundle = new Bundle();
bundle.putLong("value", System.currentTimeMillis() - this.f1998c);
e eVar = e.e;
String strH = "user_attributed";
eVar.getClass();
e.d(strH, bundle);
}
A14 · 来源标记实际业务判断#
位置:N5/b.java:102–109。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public static boolean i() {
Kb.h hVar = Kb.h.d;
boolean z = hVar.b;
if (!z && !z) {
hVar.f1997a = Kb.a.b.f1988a.getInt("user_source", 0);
hVar.b = true;
}
return hVar.f1997a > 0 && !n.b.f2006a;
A15 · 七个广告场景及分组门禁#
位置:Y2/AbstractC8138a.java:15–78。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
static {
SpecialAdControl specialAdControl = new SpecialAdControl(false, false, false, false, false, false, false, 127, (AbstractC7241k) null);
f46572a = specialAdControl;
try {
JSONObject jSONObject = new JSONObject(C2.c.f723q.c(""));
specialAdControl.setHomeCenter(jSONObject.optBoolean("home_center", false));
specialAdControl.setHomeBottom(jSONObject.optBoolean("home_bottom", true));
specialAdControl.setScanProcess(jSONObject.optBoolean("scan_process", true));
specialAdControl.setScanResult(jSONObject.optBoolean("scan_result", true));
specialAdControl.setResultPage(jSONObject.optBoolean("result_page", true));
specialAdControl.setSetting(jSONObject.optBoolean("setting", true));
} catch (Exception e) {
e.printStackTrace();
}
}
/* JADX WARN: Failed to restore switch over string. Please report as a decompilation issue */
public static boolean a(String str) {
int iHashCode = str.hashCode();
SpecialAdControl specialAdControl = f46572a;
switch (iHashCode) {
case -1785714657:
if (!str.equals("scan_result") || !specialAdControl.getScanResult()) {
return false;
}
int i = C6024a.f33889a;
return N5.b.i();
case -929644883:
if (!str.equals("scan_process") || !specialAdControl.getScanProcess()) {
return false;
}
int i7 = C6024a.f33889a;
return N5.b.i();
case -726124149:
if (str.equals("home_bottom")) {
return specialAdControl.getHomeBottom();
}
return false;
case -706909259:
if (!str.equals("home_center") || !specialAdControl.getHomeCenter()) {
return false;
}
int i10 = C6024a.f33889a;
return N5.b.i();
case -537207439:
if (str.equals("result_page")) {
return specialAdControl.getResultPage();
}
return false;
case -24715096:
if (str.equals("preview_detail")) {
return specialAdControl.getPreviewDetail();
}
return false;
case 1985941072:
if (!str.equals("setting") || !specialAdControl.getSetting()) {
return false;
}
int i11 = C6024a.f33889a;
return N5.b.i();
default:
return false;
}
}
A16 · 默认字段及构造器指令;含反编译错误边界#
位置:com/fubian/cleaner/ad/SpecialAdControl.java:116–217。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public /* synthetic */ SpecialAdControl(int i, boolean z, boolean z3, boolean z6, boolean z10, boolean z11, boolean z12, boolean z13, n0 n0Var) {
this.homeCenter = (i & 1) == 0 ? false : z;
if ((i & 2) == 0) {
this.homeBottom = true;
} else {
this.homeBottom = z3;
}
if ((i & 4) == 0) {
this.scanProcess = true;
} else {
this.scanProcess = z6;
}
if ((i & 8) == 0) {
this.scanResult = true;
} else {
this.scanResult = z10;
}
if ((i & 16) == 0) {
this.resultPage = true;
} else {
this.resultPage = z11;
}
if ((i & 32) == 0) {
this.setting = true;
} else {
this.setting = z12;
}
if ((i & 64) == 0) {
this.previewDetail = true;
} else {
this.previewDetail = z13;
}
}
public SpecialAdControl(boolean z, boolean z3, boolean z6, boolean z10, boolean z11, boolean z12, boolean z13) {
this.homeCenter = z;
this.homeBottom = z3;
this.scanProcess = z6;
this.scanResult = z10;
this.resultPage = z11;
this.setting = z12;
this.previewDetail = z13;
}
/* JADX ERROR: NullPointerException in pass: InitCodeVariables
java.lang.NullPointerException
*/
public /* synthetic */ SpecialAdControl(boolean r2, boolean r3, boolean r4, boolean r5, boolean r6, boolean r7, boolean r8, int r9, kotlin.jvm.internal.AbstractC7241k r10) {
/*
r1 = this;
r10 = r9 & 1
if (r10 == 0) goto L5
r2 = 0
L5:
r10 = r9 & 2
r0 = 1
if (r10 == 0) goto Lb
r3 = r0
Lb:
r10 = r9 & 4
if (r10 == 0) goto L10
r4 = r0
L10:
r10 = r9 & 8
if (r10 == 0) goto L15
r5 = r0
L15:
r10 = r9 & 16
if (r10 == 0) goto L1a
r6 = r0
L1a:
r10 = r9 & 32
if (r10 == 0) goto L1f
r7 = r0
L1f:
r9 = r9 & 64
if (r9 == 0) goto L2c
r10 = r0
r8 = r6
r9 = r7
r6 = r4
r7 = r5
r4 = r2
r5 = r3
r3 = r1
goto L34
L2c:
r10 = r8
r9 = r7
r7 = r5
r8 = r6
r5 = r3
r6 = r4
r3 = r1
r4 = r2
L34:
r3.<init>(r4, r5, r6, r7, r8, r9, r10)
return
*/
throw new UnsupportedOperationException("Method not decompiled: com.fubian.cleaner.ad.SpecialAdControl.<init>(boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, kotlin.jvm.internal.k):void");
}
}
A17 · Thinkup加载、展示与节流#
位置:E8/C5876f.java:74–140。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
@Override // e8.InterfaceC5878h
public final boolean a() {
boolean z = this.f33365a > 0 && TUInterstitialAutoAd.isAdReady(AbstractC5940d.f33639c);
if (!z) {
d();
}
return z;
}
@Override // e8.InterfaceC5878h
public final boolean b(Activity activity, String str, i iVar) {
if (this.f33365a <= 0 || !TUInterstitialAutoAd.isAdReady(AbstractC5940d.f33639c)) {
d();
return false;
}
TUInterstitialAutoAd.show(activity, AbstractC5940d.f33639c, new C5872b(this, str, iVar));
this.f33365a = System.currentTimeMillis();
return true;
}
public final void c() {
String str = AbstractC5940d.d;
if (str == null || str.endsWith("_TODO")) {
return;
}
if (this.e == null) {
this.e = new TUSplashAd(AbstractC7472h.f40480a, AbstractC5940d.d, new C5875e(this, null, null));
}
if (this.e.isAdReady() || System.currentTimeMillis() - this.f33366c < 2000 || System.currentTimeMillis() - this.b < 30000) {
return;
}
this.b = System.currentTimeMillis();
this.e.loadAd();
}
public final void d() {
String str = AbstractC5940d.f33639c;
if (str == null || str.endsWith("_TODO") || System.currentTimeMillis() - this.f33365a < 120000) {
return;
}
this.f33365a = System.currentTimeMillis();
String[] strArr = {AbstractC5940d.f33639c};
Context context = AbstractC7162a.f39500a;
if (context == null) {
context = AbstractC7472h.f40480a;
}
TUInterstitialAutoAd.init(context, strArr, new i5.e(21));
}
public final boolean f(String str, boolean z, Ga ga2) {
this.f = false;
TUSplashAd tUSplashAd = this.e;
if (tUSplashAd == null || !tUSplashAd.isAdReady()) {
this.f = z;
c();
return false;
}
C5875e c5875e = new C5875e(this, str, ga2);
this.e.setAdListener(c5875e);
SplashAdActivity.splashAd = new m.a(this.e, new Kb.b(c5875e, 3));
App app = AbstractC7472h.f40480a;
Intent intent = new Intent(app, (Class<?>) SplashAdActivity.class);
intent.setFlags(268435456);
intent.addFlags(65536);
this.f33366c = System.currentTimeMillis();
app.startActivity(intent);
return true;
A18 · MAX开屏/原生/插屏加载节流#
位置:E8/C5877g.java:146–221。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public final void d(boolean z) {
String str = AbstractC5939c.d;
if (str == null || str.endsWith("_TODO") || !e()) {
return;
}
if (this.f33370k == null) {
MaxAppOpenAd maxAppOpenAd = new MaxAppOpenAd(AbstractC5939c.d);
this.f33370k = maxAppOpenAd;
maxAppOpenAd.setListener(new C0749a(this, 19));
}
MaxAppOpenAd maxAppOpenAd2 = this.f33370k;
if (maxAppOpenAd2 == null || maxAppOpenAd2.isReady() || this.f33370k.isLoading() || this.f33370k.isShowing()) {
return;
}
if (z || System.currentTimeMillis() - this.i >= 30000) {
this.i = System.currentTimeMillis();
this.f33370k.loadAd();
}
}
public final boolean e() {
if (this.f33367a) {
return true;
}
if (System.currentTimeMillis() - this.b < 5000) {
return false;
}
c();
this.b = System.currentTimeMillis();
return false;
}
public final boolean f(boolean z) {
String str = AbstractC5939c.f33637c;
if (str != null && !str.endsWith("_TODO")) {
if (!e()) {
return false;
}
if (this.f == null) {
this.f = new MaxNativeAdLoader(AbstractC5939c.f33637c);
C5873c c5873c = new C5873c(this);
this.f.setRevenueListener(c5873c);
this.f.setNativeAdListener(c5873c);
}
if (!z && System.currentTimeMillis() - this.g < 2000) {
return false;
}
this.g = System.currentTimeMillis();
this.f.loadAd();
}
return true;
}
public final void h(boolean z) {
C5877g c5877g;
String str = AbstractC5939c.b;
if (str == null || str.endsWith("_TODO") || !e()) {
return;
}
if (this.e == null) {
MaxInterstitialAd maxInterstitialAd = new MaxInterstitialAd(AbstractC5939c.b);
this.e = maxInterstitialAd;
Object obj = null;
c5877g = this;
maxInterstitialAd.setListener(new U9.c(c5877g, obj, obj, false, 16));
} else {
c5877g = this;
}
MaxInterstitialAd maxInterstitialAd2 = c5877g.e;
if (maxInterstitialAd2 == null || maxInterstitialAd2.isReady() || c5877g.e.isLoading() || c5877g.e.isShowing()) {
return;
}
if (z || System.currentTimeMillis() - c5877g.f33368c >= 30000) {
c5877g.f33368c = System.currentTimeMillis();
c5877g.e.loadAd();
}
A19 · 展示失败后的提供方回退#
位置:N5/b.java:121–142。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public static boolean l(String str, InterfaceC5962a interfaceC5962a) {
C7389c c7389c;
C2601a c2601a = C2601a.f10914c;
Bb.i iVar = new Bb.i(interfaceC5962a, 11);
c2601a.getClass();
Activity activity = AbstractC7162a.f39500a;
if (activity == null) {
return false;
}
InterfaceC5878h interfaceC5878hA = c2601a.a();
boolean zB = interfaceC5878hA.b(activity, str, iVar);
if (!zB && ((c7389c = Jb.a.b.f1818a) == null || c7389c.f40242j > 0)) {
InterfaceC5878h interfaceC5878h = c2601a.b;
C5876f c5876f = c2601a.f10915a;
if (interfaceC5878hA != c5876f) {
interfaceC5878h = interfaceC5878hA == interfaceC5878h ? c5876f : null;
}
if (interfaceC5878h != null) {
return interfaceC5878h.b(activity, str, iVar);
}
}
return zB;
A20 · 提供方选择器simple指令复核#
位置:@simple/c/a.java:59–220。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public final InterfaceC5878h a() {
C7389c r22 = Jb.a.b.f1818a;
if (r22 == null) goto L5;
int r23 = r22.f40244l;
L6:
C5877g r4 = this.b;
C5876f r52 = this.f10915a;
int r7 = -1;
if (r23 <= 0) goto L41;
if (r23 <= 0) goto L41;
boolean r82 = r52.a();
boolean r92 = r4.a();
if (r82 == false) goto L41;
if (r92 == false) goto L41;
MaxAd r83 = F.f40660a;
if (r83 == null) goto L17;
double r84 = r83.getRevenue() * 1000.0d;
L19:
if (r84 < 0.01d) goto L41;
ArrayList r10 = new ArrayList(); // Catch: Throwable -> L123
TUCustomContentInfo r11 = new TUCustomContentInfo(AbstractC5940d.f33639c, AbstractC8107m.h(AbstractC8142a.a("5477Tg4VXbn4\n"), AbstractC8142a.a("k+GLIWBKLt0=\n"))); // Catch: Throwable -> L123
TUCustomContentInfo r12 = new TUCustomContentInfo(r84, AbstractC8107m.h(AbstractC8142a.a("wNYh8CTDlSr+yzDkFMaYLw==\n"), AbstractC8142a.a("oaZRnEu1/EQ=\n"))); // Catch: Throwable -> L123
r10.add(r11); // Catch: Throwable -> L123
r10.add(r12); // Catch: Throwable -> L123
TUCustomContentInfo r85 = TUSDKGlobalSetting.customContentReviewResult(r10); // Catch: Throwable -> L123
if (r85 == null) goto L31;
Object r86 = r85.getCustomContentObject(); // Catch: Throwable -> L123
if (AbstractC8107m.h(AbstractC8142a.a("jxpmlblD0EqxB3eBiUbdTw==\n"), AbstractC8142a.a("7moW+dY1uSQ=\n")).equals(r86) == false) goto L28;
String r87 = AbstractC8107m.h(AbstractC8142a.a("A0mKTu9+xkI9VJta33vLRw==\n"), AbstractC8142a.a("Yjn6IoAIryw=\n")); // Catch: Throwable -> L123
L32:
if (r87 == null) goto L41;
C7622e r93 = b.a().n(r87);
if (r93 == null) goto L37;
int r94 = r93.l(b.b);
L38:
if (r94 >= r23) goto L41;
int r24 = Hb.a.a(r87);
L42:
if (r24 >= 0) goto L97;
C7389c r88 = Jb.a.b.f1818a;
if (r88 == null) goto L46;
int r89 = r88.f40243k;
L47:
if (r89 <= 0) goto L97;
List r25 = Hb.a.f1556c;
String r95 = b.f39502a;
if (r25 != null) goto L51;
L52:
char r16 = 1;
L53:
int r17 = 0;
L99:
if (r7 >= 0) goto L120;
Jb.a r26 = Jb.a.b;
C7389c r32 = r26.f1818a;
if (r32 == null) goto L118;
String r72 = r32.h;
if (Y0.b.c(r32.i) == true) goto L114;
c r33 = C1781a.b.f7628a;
Kb.a r34 = Kb.a.b;
String r35 = r34.f1988a.getString(AbstractC8107m.h(AbstractC8142a.a("+kHTn9n6gVzsWtWG\n"), AbstractC8142a.a("mzWn7YaU5Cg=\n")), null);
if (r35 == null) goto L114;
String[] r62 = r26.f1818a.i.split(AbstractC8107m.h(AbstractC8142a.a("9g==\n"), AbstractC8142a.a("20ssS4sCFa0=\n")));
int r810 = r62.length;
int r96 = r17;
L107:
if (r96 >= r810) goto L114;
String[] r102 = r62[r96].split(AbstractC8107m.h(AbstractC8142a.a("Og==\n"), AbstractC8142a.a("etFXHwnxtsQ=\n")));
if (r102.length != 2) goto L113;
if (r35.contains(r102[r17]) == false) goto L113;
r72 = r102[r16];
L113:
r96 = r96 + 1;
L114:
int r36 = Jb.a.a(r72);
if (r36 < 0) goto L117;
r7 = r36;
goto L120
L117:
r7 = r26.f1818a.g;
goto L120
L118:
r7 = Jb.a.a(AbstractC8107m.h(AbstractC8142a.a("kE2JTuuJjcGQRw==\n"), AbstractC8142a.a("oHe8fsi7t/A=\n")));
if (r7 >= 0) goto L120;
L121:
return r4;
L120:
if (r7 == 2) goto L121;
return r52;
L51:
if (r25.isEmpty() == true) goto L52;
C7622e r97 = b.a();
LinkedHashSet r103 = new LinkedHashSet();
Iterator r27 = r25.iterator();
L56:
if (r27.hasNext() == false) goto L61;
String r112 = (String) r27.next();
if (r112 == null) goto L52;
r103.add(r112);
goto L56
L61:
Iterator r28 = r103.iterator();
L63:
if (r28.hasNext() == false) goto L69;
C7622e r113 = r97.n((String) r28.next());
if (r113 == null) goto L52;
if (r113.containsKey(b.f39502a) == true) goto L63;
L69:
Iterator r29 = r103.iterator();
String r122 = null;
double r13 = Double.NEGATIVE_INFINITY;
L71:
if (r29.hasNext() == false) goto L84;
String r15 = (String) r29.next();
r16 = 1;
C7622e r1 = r97.n(r15);
if (r1 == null) goto L53;
double r104 = r1.k(b.f39502a);
if (r122 == null) goto L83;
if (Double.compare(r104, r13) > 0) goto L83;
if (Double.compare(r104, r13) != 0) goto L71;
if (r15.compareTo(r122) <= 0) goto L71;
L83:
r13 = r104;
r122 = r15;
goto L71
L84:
r16 = 1;
r17 = 0;
if (r122 == null) goto L99;
if (r13 == Double.NEGATIVE_INFINITY) goto L99;
C7622e r14 = r97.n(r122);
if (r14 == null) goto L99;
if (r89 > 0) goto L94;
L96:
r7 = Hb.a.a(r122);
goto L99
L94:
if (r14.l(b.b) < r89) goto L96;
L46:
r89 = 3;
L97:
r16 = 1;
r17 = 0;
r7 = r24;
goto L99
L37:
r94 = 0;
goto L38
L28:
if (AbstractC8107m.h(AbstractC8142a.a("0iCydGzw84HN\n"), AbstractC8142a.a("pk/CGwKvgOU=\n")).equals(r86) == false) goto L31;
r87 = AbstractC8107m.h(AbstractC8142a.a("Mu7lcP1Sez8t\n"), AbstractC8142a.a("RoGVH5MNCFs=\n")); // Catch: Throwable -> L123
L31:
r87 = null;
goto L32
L17:
r84 = 0.0d;
L41:
r24 = -1;
goto L42
L5:
r23 = 0;
A21 · 来源条件与默认桌面引导#
位置:com/fubian/cleaner/result/ResultActivity.java:86–119。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public final void x(String str) {
boolean zE;
ActivityInfo activityInfo;
int i = C6024a.f33889a;
ArrayList arrayList = null;
if (N5.b.i()) {
if (D.b) {
zE = true;
} else {
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.HOME");
ResolveInfo resolveInfoResolveActivity = getPackageManager().resolveActivity(intent, 65536);
zE = AbstractC7249t.e((resolveInfoResolveActivity == null || (activityInfo = resolveInfoResolveActivity.activityInfo) == null) ? null : activityInfo.packageName, getPackageName());
}
if (!zE) {
g.a(this);
return;
}
}
Intent intent2 = new Intent();
intent2.putExtra("title", str);
List list = (List) ((b) r()).f10720a.getValue();
if (list != null) {
arrayList = new ArrayList();
for (Object obj : list) {
if (!((AppModel) obj).getPopupAds()) {
arrayList.add(obj);
}
}
}
AbstractC7249t.h(arrayList, "null cannot be cast to non-null type java.io.Serializable");
intent2.putExtra("apps", arrayList);
intent2.setClass(this, ThreatActivity.class);
startActivity(intent2);
本轮新增实现与修复片段#
N1 · 大文件入口实际发起扫描任务#
位置:com/fubian/cleaner/compressor/BigFileActivity.java:131–136。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
@Override // com.fubian.cleaner.compressor.NeedFilePermissionActivity
public final void I() {
C0852d c0852d = (C0852d) r();
e eVar = O.f6210a;
ScopeKt.scopeLife(c0852d, d.b, new C0851c(c0852d, null));
}
N2 · 3000ms包装及最终进度100#
位置:K2/C0851c.java:35–53。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public final Object invokeSuspend(Object obj) {
EnumC8083a enumC8083a = EnumC8083a.b;
int i = this.f1897l;
C0852d c0852d = this.f1898m;
if (i == 0) {
AbstractC8090B.n(obj);
C0850b c0850b = new C0850b(c0852d, null);
this.f1897l = 1;
if (Y0.e.l(3000L, c0850b, this) == enumC8083a) {
return enumC8083a;
}
} else {
if (i != 1) {
throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine");
}
AbstractC8090B.n(obj);
}
c0852d.b.postValue(new Integer(100));
return C7546G.f40570a;
N3 · 10MiB候选扫描和类型/大小读取#
位置:K2/C0852d.java:65–109。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
if (i13 == 0) {
AbstractC8090B.n(obj);
ArrayList arrayListB = m3.m.b(J2.s.e, 10485760L, 1);
int size = arrayListB.size();
ArrayList arrayList = new ArrayList();
i = 0;
i7 = 99;
it = arrayListB.iterator();
i10 = size;
list = arrayList;
i11 = 0;
if (it.hasNext()) {
}
} else {
if (i13 != 1) {
throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine");
}
i11 = c0849a.f1893s;
int i15 = c0849a.f1892r;
i = c0849a.f1891q;
i7 = c0849a.f1890p;
i10 = c0849a.f1889o;
String str = c0849a.n;
it = c0849a.f1888m;
list = c0849a.f1887l;
AbstractC8090B.n(obj);
Iterator it3 = it;
String str2 = str;
int i16 = ((i11 + i14) * i7) / i10;
if (i16 > i7) {
i16 = i7;
}
c0852d.b.postValue(new Integer(i16));
File file = new File(str2);
String lowerCase = Ca.j.o(file).toLowerCase(Locale.ROOT);
AbstractC7249t.i(lowerCase, "toLowerCase(...)");
if (O0.a.o("mp4", "avi", "mkv", "mov").contains(lowerCase)) {
it2 = it3;
iVar = !O0.a.o("jpg", "jpeg", "png", "gif", "webp").contains(lowerCase) ? !O0.a.o("apk", CampaignEx.JSON_KEY_AAB).contains(lowerCase) ? O0.a.o("mp3", "wav", "aac", "flac", "ogg").contains(lowerCase) ? J2.i.e : J2.i.g : J2.i.f : J2.i.f1718c;
} else {
iVar = J2.i.d;
it2 = it3;
}
List list2 = list;
list2.add(new J2.c(str2, file.length(), iVar, file.lastModified()));
N4 · 文件权限、系统设置与工具返回分支#
位置:com/fubian/cleaner/compressor/NeedFilePermissionActivity.java:95–195。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
{
this.f1404c = this;
}
@Override // Fa.a
public final Object invoke() {
C7546G c7546g = C7546G.f40570a;
NeedFilePermissionActivity needFilePermissionActivity = this.f1404c;
switch (i7) {
case 0:
NeedFilePermissionActivity.C(needFilePermissionActivity);
break;
default:
int i10 = NeedFilePermissionActivity.n;
needFilePermissionActivity.getClass();
if (Build.VERSION.SDK_INT >= 30) {
Intent intent = new Intent("android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION");
intent.setData(Uri.parse("package:" + needFilePermissionActivity.getPackageName()));
needFilePermissionActivity.f15814l.launch(intent);
}
break;
}
return c7546g;
}
});
}
}
public View E() {
return null;
}
public View F() {
return null;
}
public boolean G() {
return this.f15815m;
}
public boolean H() {
C7330f c7330f = C7330f.f39993a;
if (Build.VERSION.SDK_INT >= 30) {
return Environment.isExternalStorageManager();
}
return true;
}
public abstract void I();
public final void J(int i, l lVar) {
String str;
switch (G.$EnumSwitchMapping$0[lVar.ordinal()]) {
case -1:
str = null;
break;
case 0:
default:
throw new f();
case 1:
str = "storage_use";
break;
case 2:
str = "infrequent_app";
break;
case 3:
str = "app_usage_state";
break;
case 4:
str = "video_compress";
break;
case 5:
str = "photo_compress";
break;
case 6:
str = "duplicate_photo";
break;
case 7:
str = "screenshot_clean";
break;
case 8:
str = "big_file";
break;
case 9:
str = "duplicate_file";
break;
case 10:
str = "junk_clean";
break;
case 11:
str = "online_state";
break;
}
l.b.getClass();
if (!u.W(O0.a.o(l.f1724k, l.f1725l, l.f1726m), lVar) && i == 0) {
finish();
} else {
g.b(this, null, new J(this, str, null), 3);
}
}
N5 · 主页初始化cancelAll和回调调度#
位置:com/fubian/cleaner/main/MainActivity.java:196–213。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
@Override // com.fubian.cleaner.common.ui.BaseBindingActivity
public final void s() {
C0874k c0874k = (C0874k) q();
FragmentManager supportFragmentManager = getSupportFragmentManager();
AbstractC7249t.i(supportFragmentManager, "getSupportFragmentManager(...)");
c0874k.e.setAdapter(new D2.k(this, supportFragmentManager, getLifecycle(), ((u) r()).f6368a));
((C0874k) q()).f2066c.setOnClickListener(new D2.a(this, 19));
((C0874k) q()).d.setContent(ComposableLambdaKt.composableLambdaInstance(-1811077530, true, new D2.g(this, 4)));
Object systemService = getSystemService("notification");
AbstractC7249t.h(systemService, "null cannot be cast to non-null type android.app.NotificationManager");
((NotificationManager) systemService).cancelAll();
C8128b c8128b = (C8128b) this.f15827k.getValue();
c8128b.f46554a.removeCallbacksAndMessages(null);
i iVar = new i(c8128b, new int[]{60}, 4, new Runnable[]{iVar});
iVar.run();
AppCompatActivity appCompatActivity = c8128b.f46555c;
appCompatActivity.getOnBackPressedDispatcher().addCallback(appCompatActivity, new d(c8128b, 3));
getOnBackPressedDispatcher().addCallback(this, new d(this, 1));
N6 · 同一结果页的全屏与原生调用#
位置:com/fubian/cleaner/result/CompleteActivity.java:89–94。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
int i10 = C6024a.f33889a;
if (N5.b.h() && !isDestroyed() && !isFinishing()) {
g.b(this, null, new C8139b(this, "clean-result", null), 3);
}
v(((C0868e) q()).f2058c, "clean-result");
}
N7 · 扫描包装补足最短展示时长,非超时#
位置:Y0/e.java:165–215。下列为这个范围的反编译阅读片段;复杂方法的其余部分仍须回到源文件,不能把片段称为完整原始源码。
public static final Object l(long j10, k kVar, xa.c cVar) {
s sVar;
long j11;
long j12;
if (cVar instanceof s) {
sVar = (s) cVar;
int i = sVar.f40007p;
if ((i & Integer.MIN_VALUE) != 0) {
sVar.f40007p = i - Integer.MIN_VALUE;
} else {
sVar = new s(cVar);
}
}
Object objInvoke = sVar.f40006o;
Object obj = EnumC8083a.b;
int i7 = sVar.f40007p;
if (i7 == 0) {
AbstractC8090B.n(objInvoke);
long jCurrentTimeMillis = System.currentTimeMillis();
sVar.f40004l = j10;
sVar.f40005m = jCurrentTimeMillis;
sVar.f40007p = 1;
objInvoke = kVar.invoke(sVar);
if (objInvoke != obj) {
j11 = j10;
j12 = jCurrentTimeMillis;
}
return obj;
}
if (i7 != 1) {
if (i7 != 2) {
throw new IllegalStateException("call to 'resume' before 'invoke' with coroutine");
}
Object obj2 = sVar.n;
AbstractC8090B.n(objInvoke);
return obj2;
}
j12 = sVar.f40005m;
j11 = sVar.f40004l;
AbstractC8090B.n(objInvoke);
long jCurrentTimeMillis2 = j11 - (System.currentTimeMillis() - j12);
if (jCurrentTimeMillis2 > 0) {
sVar.n = objInvoke;
sVar.f40004l = j11;
sVar.f40005m = j12;
sVar.f40007p = 2;
if (D.p(jCurrentTimeMillis2, sVar) == obj) {
return obj;
}
}
return objInvoke;
六专题导航#
| 专题 | 用途 |
|---|---|
| 产品功能与商业化分析 | 业务任务、页面、广告与来源链 |
| 权限与后台机制拆包报告 | 声明、调用、实际授权和功能边界 |
| 保活与拉活反编译代码册 | 机制图、主链步骤、代码片段与控制流修复 |
| 拉活通知规则与文案全量报告 | 触发、状态、频控、动作、候选和多语言全文 |
| 样本与证据索引 | 版本、split、签名、定位与证据范围 |
| 真机动态验证与后台存活报告 | 真实操作、后台矩阵、观察与未执行项 |