Android Launcher3 隐藏指定应用图标

本文介绍如何通过修改源码或LauncherModel代码实现Android设备上特定应用程序图标的隐藏。对于有源码的应用,直接移除清单文件中特定配置即可;而对于无源码的应用,则需在LauncherModel的loadAllApps()方法中添加条件判断进行过滤。


http://blog.youkuaiyun.com/paullovazxq/article/details/52154468



分两种情况:

  1.有源码的应用。

  因为Launcher是根据应用清单文件里

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <category android:name="android.intent.category.LAUNCHER"/>  
  来显示图标,所以如果我们有应用的源码,可以直接将清单文件里的这句话去掉,应用便不会在桌面上显示了。做整机项目的话packages\apps目录下的系统应用都可以使用此方法。


  2.没有源码的应用。

  这里用到packages\apps\Launcher3\src\com\Android\launcher3文件夹下的LauncherModel.Java文件,里面有个loadAllApps()方法,其中将所有应用的信息添加到数组的代码块如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. for (int i = 0; i < apps.size(); i++) {  
  2.     LauncherActivityInfoCompat app = apps.get(i);  
  3.     mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache, mLabelCache));  
  4. }  
我们要做的,就是跳过我们要隐藏的应用,修改如下:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. for (int i = 0; i < apps.size(); i++) {  
  2.     LauncherActivityInfoCompat app = apps.get(i);  
  3.     if("com.android.contacts".equals(apps.get(i).getApplicationInfo().packageName)  
  4.         || "com.android.mms".equals(apps.get(i).getApplicationInfo().packageName)){  
  5.         continue;  
  6.     }  
  7.     mBgAllAppsList.add(new AppInfo(mContext, app, user, mIconCache, mLabelCache));  
  8. }  
  这里是将联系人和短信应用隐藏掉。

<think>我们正在讨论如何修改Android源码(特别是Launcher3)来隐藏特定应用程序的图标。根据引用[3],我们知道可以通过修改系统源码来控制应用程序在Launcher中的显示。虽然引用[3]讲的是添加Launcher属性,但隐藏图标也是类似的原理,我们可以通过修改Launcher3的源码来实现。步骤:1.获取Launcher3的源代码。根据引用[4],我们可以从指定仓库获取(注意:引用[4]提到该项目已不再维护,但我们可以参考其代码结构)。2.在Launcher3中,应用程序图标的显示是由PackageManager返回的应用程序列表决定的。我们可以通过修改Launcher3中加载应用程序列表的代码,过滤掉我们想要隐藏应用程序。具体修改思路:在Launcher3中,有一个类负责加载应用程序列表,通常是在`src/com/android/launcher3/LauncherModel.java`或类似位置(不同版本可能不同)。我们需要在加载应用程序列表后,根据包名过滤掉特定的应用。例如,假设我们要隐藏包名为“com.example.hiddenapp”的应用,我们可以这样做:在加载应用列表的地方(可能是`LauncherModel`的`loadAllApps`方法或类似方法)添加过滤条件。伪代码示例:```//在加载应用列表后,创建一个新的列表,排除我们想要隐藏应用List<AppInfo>allApps=...//从PackageManager获取的应用列表List<AppInfo>filteredApps=newArrayList<>();for(AppInfoapp:allApps){if(!"com.example.hiddenapp".equals(app.componentName.getPackageName())){filteredApps.add(app);}}//然后用filteredApps替换原来的allApps```3.修改后,重新编译Launcher3并刷入设备。注意事项:-由于不同版本的Android系统,Launcher3的代码结构可能不同,需要根据具体版本调整。-隐藏应用可能需要考虑系统权限,确保修改不会导致其他问题。另外,引用[1]和[2]虽然讲的是修改图标和禁用左右滑动,但修改源码的方法论是类似的:定位到相关代码,进行修改,然后重新编译。根据引用[3]的思路,我们还可以考虑在系统层面修改(例如在PackageManagerService中做过滤),但那样影响范围更大。在Launcher3中修改更直接。相关问题:§§相关问题§§1.如何获取Android系统的Launcher3源代码?2.修改Launcher3后如何编译并刷入设备?3.除了修改Launcher3源码,还有其他方法可以隐藏应用图标吗?4.如何通过修改系统设置或使用root权限来隐藏应用图标?</think>### 在Launcher3隐藏特定应用图标的方法 要在Android源码中修改Launcher3隐藏特定应用程序图标,需遵循以下步骤: #### 核心修改步骤 1. **定位应用过滤逻辑** 在Launcher3源码中,应用图标加载逻辑位于`LauncherModel.java`的`loadAllApps()`方法中。需在此处添加应用过滤条件: ```java // 在loadAllApps方法中添加过滤 List<AppInfo> allApps = ... // 原始应用列表 List<AppInfo> filteredApps = new ArrayList<>(); for (AppInfo app : allApps) { if (!shouldHideApp(app.componentName.getPackageName())) { filteredApps.add(app); } } ``` 2. **实现隐藏判断函数** 创建`shouldHideApp()`方法检测目标应用(示例隐藏包名为`com.example.hiddenapp`): ```java private boolean shouldHideApp(String packageName) { // 定义需隐藏应用包名列表 Set<String> hiddenApps = new HashSet<>(Arrays.asList( "com.example.hiddenapp", "com.another.hiddenapp" )); return hiddenApps.contains(packageName); } ``` 3. **修改应用数据模型** 在`AllAppsList.java`中更新`add()`方法,在添加应用前检查: ```java public void add(AppInfo info) { if (!shouldHideApp(info.componentName.getPackageName())) { mApps.add(info); } } ``` #### 编译与部署 1. 将修改后的Launcher3编译进系统镜像 ```bash mmm packages/apps/Launcher3/ make snod ``` 2. 刷入修改后的系统镜像 3. 重启后执行强制刷新: ```bash adb shell am force-stop com.android.launcher3 ``` #### 注意事项 1. **签名验证** 需使用与设备匹配的签名密钥编译,否则可能无法安装[^4] 2. **多用户支持** 若需支持多用户,应在`shouldHideApp()`中添加用户ID判断 3. **动态更新** 可通过创建系统级配置接口实现动态管理隐藏列表: ```java // 读取系统设置中的隐藏列表 hiddenApps = Settings.Secure.getString( context.getContentResolver(), "hidden_app_list" ).split(","); ``` > **替代方案建议**: > 若非必须修改源码,可考虑: > - 使用`pm disable-user com.example.hiddenapp`禁用应用(需root) > - 第三方启动器提供的隐藏功能 > - 自定义ContentProvider动态过滤应用列表[^3] ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值