EasyClean v1.0.2 保活与拉活反编译代码册
EasyClean v1.0.2 保活与拉活反编译代码册返回竞品库
报告口径本页直接渲染本地报告真源;静态能力、动态观察、推断和线上未验证项不得互相替代。

宽表格和代码可左右滑动查看。

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、签名、定位与证据范围
真机动态验证与后台存活报告 真实操作、后台矩阵、观察与未执行项
竞品拆包报告库 · 逆向结论按证据等级阅读