1、问题描述
我们一个基于rk3368平台Android5.1系统的项目,因为我们的系统裁减了一些功能,没有外挂SD,如果在恢复出厂设置时勾选"Erase SD card"选项,就会恢复出厂设置失败。决定隐藏掉“Erase SD card"选项,来避免这个问题,下面开始动手去操作怎么去隐藏
2、寻找原代码位置
2.1、点击Erase SD card
板子通过otg线连接电脑,打开电脑adb界面,打开logcat,然后开始点击“Erase SD card”选项,
2.2、找到关键信息
在点击“Erase SD card”选项的同时,观察logcat打印信息,找到定位关键词:MasterClear
2.3、查找MasterClear所在的源码文件
- android/packages/apps/Settings中查找名称或者内容带MasterClear的文档
- 找到master_clear.xml文档
- 在master_clear.xml找到含有关键词的位置,添加android:visibility="gone"进行注释
4、原代码
<TextView android:id="@+id/other_users_present"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:textSize="18sp"
android:text="@string/master_clear_other_users_present" />
<TextView android:id="@+id/erase_external_option_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="@string/master_clear_desc_erase_external_storage" />
<LinearLayout android:id="@+id/erase_external_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:focusable="true"
android:clickable="true">
<CheckBox android:id="@+id/erase_external"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingEnd="8dp"
android:focusable="false"
android:clickable="false"
android:duplicateParentState="true" />
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="12dp"
android:textSize="18sp"
android:text="@string/erase_external_storage" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="4sp"
android:textSize="14sp"
android:text="@string/erase_external_storage_description" />
</LinearLayout>
</LinearLayout>
5、修改后的代码
修改编译后,即可隐藏擦除SD菜单选项
<TextView android:id="@+id/other_users_present"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:textSize="18sp"
android:text="@string/master_clear_other_users_present" />
<TextView android:id="@+id/erase_external_option_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="@string/master_clear_desc_erase_external_storage" />
<LinearLayout android:id="@+id/erase_external_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:focusable="true"
android:clickable="true">
<CheckBox android:id="@+id/erase_external"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingEnd="8dp"
android:focusable="false"
android:clickable="false"
android:duplicateParentState="true" />
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="12dp"
android:textSize="18sp"
android:text="@string/erase_external_storage" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="4sp"
android:textSize="14sp"
android:text="@string/erase_external_storage_description" />
</LinearLayout>
</LinearLayout>