========================================
小白教程：APK隐藏布局的两种方法（MT管理器版）
适用包名：com.grass.mh (v1.6.0)
========================================

【前言】
本教程面向完全零基础的小白，用最通俗的语言讲解
如何在MT管理器中隐藏APP里的 unwanted 布局/按钮/Tab。

========================================
【先理解几个基本概念】
========================================

1. APK里面有什么？
   APK本质上是一个压缩包，里面包含：
   - 图片、布局XML文件（res目录）
   - 代码（转成Smali格式，存在smali目录里）
   - 配置信息（AndroidManifest.xml）

2. 什么是Smali？
   Android的Java/Kotlin代码编译后变成DEX文件，
   反编译后变成Smali代码（一种类似汇编的低级语言）。
   MT管理器的"DEX编辑器++"改的就是Smali代码。

3. 布局显示由谁控制？
   有两种控制方式：
   - XML布局文件中写死（静态控制）
   - Java/Smali代码运行时动态设置（动态控制）
   
   如果代码里有动态控制，改XML无效！
   本APP的底部导航栏就是代码动态控制的。

========================================
【方法一：改Smali代码（推荐/必须）】
========================================

【原理】
在Android中，控制视图显示/隐藏的代码是：
   view.setVisibility(View.VISIBLE);   // 显示 = 0
   view.setVisibility(View.GONE);      // 隐藏且不占位 = 8
   view.setVisibility(View.INVISIBLE); // 隐藏但占位 = 4

在Smali代码中对应：
   const/16 v0, 0x0     // VISIBLE
   const/16 v0, 0x8     // GONE
   const/16 v0, 0x4     // INVISIBLE

【适用场景】
- 布局是代码动态控制的（绝大多数APP的Tab栏、导航栏）
- 本APP的底部导航栏、吃瓜Tab都属于这种情况

【实战步骤：隐藏底部导航"导航站"和"AI站"】

1. MT管理器打开APK → DEX编辑器++ → 类列表

2. 搜索类名进入：
   com.grass.mh.ui.MainActivity

3. 切换到"Smali"标签页，搜索关键词：
   llSwitchZero
   
4. 找到这段代码（约第1679行附近）：

   ----------------------------------------
   原始代码（显示AI站）：
   ----------------------------------------
   iget-object v0, p0, Lcom/grass/mh/ui/MainActivity;->binding:Landroidx/databinding/ViewDataBinding;
   check-cast v0, Lcom/grass/mh/databinding/ActivityMainBinding;
   iget-object v0, v0, Lcom/grass/mh/databinding/ActivityMainBinding;->llSwitchFive:Landroid/widget/LinearLayout;
   invoke-virtual {v0, v3}, Landroid/widget/LinearLayout;->setVisibility(I)V
   
   说明：v3的值是0（VISIBLE），这段代码把AI站设为"显示"

5. 修改成：

   ----------------------------------------
   修改后代码（隐藏导航站和AI站）：
   ----------------------------------------
   iget-object v0, p0, Lcom/grass/mh/ui/MainActivity;->binding:Landroidx/databinding/ViewDataBinding;
   check-cast v0, Lcom/grass/mh/databinding/ActivityMainBinding;
   iget-object v0, v0, Lcom/grass/mh/databinding/ActivityMainBinding;->llSwitchZero:Landroid/widget/LinearLayout;
   const/16 v1, 0x8
   invoke-virtual {v0, v1}, Landroid/widget/LinearLayout;->setVisibility(I)V
   
   iget-object v0, p0, Lcom/grass/mh/ui/MainActivity;->binding:Landroidx/databinding/ViewDataBinding;
   check-cast v0, Lcom/grass/mh/databinding/ActivityMainBinding;
   iget-object v0, v0, Lcom/grass/mh/databinding/ActivityMainBinding;->llSwitchFive:Landroid/widget/LinearLayout;
   invoke-virtual {v0, v1}, Landroid/widget/LinearLayout;->setVisibility(I)V

   说明：
   - 新增了隐藏llSwitchZero（导航站）的代码
   - 把llSwitchFive（AI站）的可见性从0改为8
   - 0x8 = View.GONE = 彻底隐藏且不占位置

6. 保存并退出，MT管理器会自动编译。

【实战步骤：隐藏"吃瓜"Tab内的"应用中心"和"广场"】

1. 在类列表搜索：
   com.grass.mh.ui.community.fragment.FindFragment

2. 切换到Smali，搜索关键词：
   应用中心
   或 \u5e94\u7528\u4e2d\u5fc3

3. 找到构造方法中这段代码（约第103行）：

   ----------------------------------------
   原始代码（3个子Tab）：
   ----------------------------------------
   const-string v0, "\u5e94\u7528\u4e2d\u5fc3"    ← 应用中心
   const-string v1, "\u5173\u6ce8"                ← 关注
   const-string v2, "\u5e7f\u573a"                ← 广场
   filled-new-array {v0, v1, v2}, [Ljava/lang/String;
   
   const/4 v0, 0x3                               ← 数组长度=3
   new-array v0, v0, [Landroidx/fragment/app/Fragment;
   
   new-instance v1, Lcom/grass/mh/ui/community/fragment/CommunityAppCenterFragment;
   invoke-direct {v1}, ...;<init>()V
   const/4 v2, 0x0
   aput-object v1, v0, v2                        ← 第0个=应用中心
   
   new-instance v1, Lcom/grass/mh/ui/community/fragment/AttentionFragment;
   invoke-direct {v1}, ...;<init>()V
   const/4 v2, 0x1
   aput-object v1, v0, v2                        ← 第1个=关注
   
   new-instance v1, Lcom/grass/mh/ui/community/fragment/SquareFragment;
   invoke-direct {v1}, ...;<init>()V
   const/4 v2, 0x2
   aput-object v1, v0, v2                        ← 第2个=广场

4. 修改成：

   ----------------------------------------
   修改后代码（只保留"关注"）：
   ----------------------------------------
   const-string v0, "\u5173\u6ce8"                ← 只保留关注
   filled-new-array {v0}, [Ljava/lang/String;
   
   const/4 v0, 0x1                               ← 数组长度=1
   new-array v0, v0, [Landroidx/fragment/app/Fragment;
   
   new-instance v1, Lcom/grass/mh/ui/community/fragment/AttentionFragment;
   invoke-direct {v1}, ...;<init>()V
   const/4 v2, 0x0
   aput-object v1, v0, v2                        ← 第0个=关注

   说明：
   - 删除了"应用中心"和"广场"的字符串定义
   - 数组长度从3改为1
   - 删除了CommunityAppCenterFragment和SquareFragment的实例化
   - 只保留AttentionFragment

========================================
【方法二：改XML布局文件（部分场景可用）】
========================================

【原理】
Android布局文件（XML）中可以直接写：
   android:visibility="gone"

【适用场景】
- 布局是完全静态的，代码里没有动态修改它的可见性
- 比如某些固定的广告位、占位符等

【为什么不适用于本APP】
本APP的底部导航栏在MainActivity的initView()方法中，
代码里有这样一行：
   llSwitchFive.setVisibility(View.VISIBLE);

这意味着即使你在XML里把它写成gone，
运行时代码也会把它强制显示出来！
所以改XML对本APP无效。

【如果XML有效，操作步骤】

1. MT管理器打开APK → ARSC编辑器 → 搜索资源
2. 找到布局XML文件（如activity_main.xml）
3. 找到对应View的节点，添加：
   android:visibility="gone"
4. 保存

========================================
【两种方法对比总结】
========================================

| 方法 | 难度 | 适用场景 | 对本APP是否有效 |
|------|------|----------|----------------|
| 改Smali setVisibility | 中等 | 代码动态控制的布局 | 有效（必须用） |
| 改XML visibility | 简单 | 静态布局，无代码覆盖 | 无效（代码会覆盖） |

========================================
【关键数字对照表】
========================================

| Smali值 | Java常量 | 含义 |
|---------|----------|------|
| 0x0 (0) | View.VISIBLE | 完全显示 |
| 0x4 (4) | View.INVISIBLE | 隐藏但占位 |
| 0x8 (8) | View.GONE | 隐藏且不占位（推荐） |

========================================
【常见问题】
========================================

Q1：为什么搜索"应用中心"搜不到？
A：代码里用的是Unicode转义 \u5e94\u7528\u4e2d\u5fc3，
   直接搜中文可能搜不到，建议搜 CommunityAppCenterFragment

Q2：改错了Smali代码导致编译失败怎么办？
A：MT管理器会提示错误。建议每次改之前截图备份，
   或者重新反编译一份新的APK重新开始。

Q3：能不能只隐藏视图但保留点击功能？
A：可以，把setVisibility改成改透明度，
   或把宽高设为0，但不推荐，容易出bug。

Q4：隐藏后底部导航栏会留空白吗？
A：用GONE(8)不会留白，用INVISIBLE(4)会留白。
   本教程用的是GONE，所以不会留空白。

========================================
