- **版权声明: **本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!
曾几何时,我也喜欢嘟嘟桌面,奈何嘟嘟桌面越来越卡,奈何车机性能的限制,也只能在原厂桌面上想办法 总说周知,原厂桌面只能显示应用商店安装过的应用,然而应用商店无法实现个性化,搜,只能反编译看看原厂桌面的代码查找突破口
(此处省略大部分代码,惋惜我的头发)
1#用户安装的app 控制显示
2.field private static final SP1_NAME:Ljava/lang/String; = "userappicon"
3#系统版本号
4.field private static final SPFORVERSION_NAME:Ljava/lang/String; = "systemversion"
5#系统通知
6.field private static final SP_NAME:Ljava/lang/String; = "notification"
7#添加可显示在桌面上的包名
8.method public addUserAppIcon(Ljava/lang/String;Z)V
9 .locals 1
10 .param p1, "packageName" # Ljava/lang/String;
11 .param p2, "exsist" # Z
12
13 .line 56
14 sget-object v0, Lcom/gaei/launcher/SharedPreferencesHelper;->editor1:Landroid/content/SharedPreferences$Editor;
15
16 invoke-interface {v0, p1, p2}, Landroid/content/SharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
17
18 .line 57
19 sget-object v0, Lcom/gaei/launcher/SharedPreferencesHelper;->editor1:Landroid/content/SharedPreferences$Editor;
20
21 invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z
22
23 .line 58
24 return-void
25.end method
26
27#判断包名是否存在于配置中
28.method public getAppIsExsisted(Ljava/lang/String;)Z
29 .locals 3
30 .param p1, "packageName" # Ljava/lang/String;
31
32 .line 77
33 const/4 v0, 0x0
34
35 .line 78
36 .local v0, "isExsisted":Z
37 sget-object v1, Lcom/gaei/launcher/SharedPreferencesHelper;->sp1:Landroid/content/SharedPreferences;
38
39 if-eqz v1, :cond_0
40
41 .line 79
42 sget-object v1, Lcom/gaei/launcher/SharedPreferencesHelper;->sp1:Landroid/content/SharedPreferences;
43
44 const/4 v2, 0x0
45
46 invoke-interface {v1, p1, v2}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
47
48 move-result v0
49
50 .line 81
51 :cond_0
52 return v0
53.end method
54
55#从配置中移除包名
56.method public removeUserAppIcon(Ljava/lang/String;)V
57 .locals 1
58 .param p1, "packageName" # Ljava/lang/String;
59
60 .line 108
61 sget-object v0, Lcom/gaei/launcher/SharedPreferencesHelper;->editor1:Landroid/content/SharedPreferences$Editor;
62
63 invoke-interface {v0, p1}, Landroid/content/SharedPreferences$Editor;->remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
64
65 .line 109
66 sget-object v0, Lcom/gaei/launcher/SharedPreferencesHelper;->editor1:Landroid/content/SharedPreferences$Editor;
67
68 invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z
69
70 .line 110
71 return-void
72.end method主要方法为getAppIsExsisted和removeUserAppIcon getAppIsExsisted中会返回true/false表示是否存在,此处需要修改返回值,让其永恒返回成true removeUserAppIcon则删除配置,此处我们把方法体内的代码去掉即可 重新打包签名后即可安装
有人会说,我喜欢原汁原味的,我不想动原厂的桌面,有没有其他办法实现呢?其实是有的 通过上面反编译后得知,控制应用显示的配置其实是userappicon,那么我们可以通过外挂app的方式进行控制 外挂app核心代码:
1try {
2 Context launcherContext = null;
3 try {
4 // 获取其他程序对应的Context
5 launcherContext = createPackageContext("com.gaei.launcher",
6 Context.CONTEXT_IGNORE_SECURITY);
7 } catch (PackageManager.NameNotFoundException e) {
8 e.printStackTrace();
9 Toast.makeText(getApplicationContext(), "无法获取launcherContext"+e.getMessage(),
10 Toast.LENGTH_LONG).show();
11 return;
12 }
13 // 使用其他程序的COntext获取对应的SharedPreferences
14 SharedPreferences sharedPreferences = launcherContext.getSharedPreferences("userappicon",
15 Context.MODE_WORLD_WRITEABLE);
16
17 if (sharedPreferences!=null)
18 {
19 Toast.makeText(getApplicationContext(), "成功读取!!",
20 Toast.LENGTH_LONG).show();
21
22 SharedPreferences.Editor userAppIconEdit = sharedPreferences.edit();
23 userAppIconEdit.putBoolean("com.chenmo.gaei.box", true); //com.chenmo.gaei.box为你所需要添加的包名
24 userAppIconEdit.apply();
25 Toast.makeText(getApplicationContext(), "添加成功",Toast.LENGTH_LONG).show();
26 }
27
28 }catch (Exception ex)
29 {
30 Toast.makeText(getApplicationContext(), "无法获取launcherContext"+ex.getMessage(),
31 Toast.LENGTH_LONG).show();
32 }卸载
设置->车辆信息(长按)->应用->应用商店/系统更新/启动器->卸载更新