三星官方固件貌似就有类似功能,感觉还是比较实用 的。
#这里采用的是调用第三方软件实现内存清理的,平 时使用手机时我就注意到App Arbiter的特点,就是体 积小、纯粹和绿色,那这次就用它了。
#首先来加入按钮,这是在布局文件实现的。反编译s ystemUI.apk,为了使长按主页键必须出现清理按钮 ,那么先找到layout/status_bar_no_recent_apps.xm l(没有最近打开的程序),在布局结束定义前加入按钮
<Button
android:layout_width="150.0dip"
android:layout_height="wrap_content"
android:layout_gravity="bottom|left"
android:paddingLeft="10dip"
android:paddingBottom="10dip"
android:gravity="center"
android:onClick="openTaskManager"
android:text="@string/yijianqingli"/>
#按钮显示的字
#同样的,需要在layout-land/status_bar_recent_pa nel.xml和layout-port/status_bar_recent_panel.xml 都加入按钮代码,分别对应横屏、竖屏。 接下来到strings.xml加入
<string name="yijianqingli" >Kill All</string>
在values-zh-rCN/strings.xml加 入
<string name="yijianqingli">一键清理</string>
#接下来处理smali部分,打开\smali\com\android\s ystemui\SystemUIService.smali,在最后加入按钮事 件,注意line的值要紧接原文件的值:
.method public openTaskManager(Landroid/view/View;)V.locals 5 .parameter "view"
.prologue .line 96 :try_start_0
.line 97 new-instance v1, Landroid/content/Intent;
invoke-direct {v1}, Landroid/content/Intent;-><init>()V
.line 98 .local v1, intent:Landroid/content/Intent; const-string v2, "android.intent.action.MAIN"#⑴
invoke-virtual {v1, v2}, Landroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;
.line 99 const/high16 v2, 0x1000
invoke-virtual {v1, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
.line 100 const-string v2, "com.lbe.security"#⑵
const-string v3, "com.lbe.security.ui.desktop.shortcut.CleanActivity"#⑶
invoke-virtual {v1, v2, v3}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
invoke-virtual {p0, v1}, Lcom/android/systemui/SystemUIService;->startActivity(Landroid/content/Intent;)V
.line 101 #iget-object v1, p0, Lcom/android/systemui/SystemUIService;->mRecentsPanel:Lcom/android/systemui/recent/RecentsPanelView;
#invoke-virtual {v1}, Lcom/android/systemui/recent/RecentsPanelView;->dismiss()V
#invoke-virtual {p0}, Lcom/android/systemui/SystemUIService;->onBackPressed()V
#const/4 v1, 0x0
#invoke-virtual {p0, v1, v1}, Lcom/android/systemui/recent/RecentsPanelView;->show(ZZ)V
:try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
.line 102 .end local v1 #intent:Landroid/content/Intent;
:goto_0 return-void
.line 103 :catch_0 move-exception v0
.line 104 .local v0, e:Ljava/lang/Exception; invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_0
.end method
#关于(1)(2)(3)的修改,我们不需要启动主程序而是 启动它内部的一键清理功能。反编译App Arbiter,打 开AndroidManifest.xml,
(1)填action动作,(2)填 package名就是apk名,(3)填需要调用的activity,就 是我们需要的“一键清理”。填法是 package名+activit y中的android:name。
▇这一步将按钮链接到程序App Arbiter的一键清理功能的activity,所以这里可以自己定义到那个软件的一键清理,我定义到了lbe的,链接的软件一定要已经安装了,不过安装在data不知道行不行,我的都是系统的!大家自测。。。
#现在可以回编译替换文件了,记得把修改好的App A rbiter也刷进手机。 修改好的App
#这里采用的是调用第三方软件实现内存清理的,平 时使用手机时我就注意到App Arbiter的特点,就是体 积小、纯粹和绿色,那这次就用它了。
#首先来加入按钮,这是在布局文件实现的。反编译s ystemUI.apk,为了使长按主页键必须出现清理按钮 ,那么先找到layout/status_bar_no_recent_apps.xm l(没有最近打开的程序),在布局结束定义前加入按钮
<Button
android:layout_width="150.0dip"
android:layout_height="wrap_content"
android:layout_gravity="bottom|left"
android:paddingLeft="10dip"
android:paddingBottom="10dip"
android:gravity="center"
android:onClick="openTaskManager"
android:text="@string/yijianqingli"/>
#按钮显示的字
#同样的,需要在layout-land/status_bar_recent_pa nel.xml和layout-port/status_bar_recent_panel.xml 都加入按钮代码,分别对应横屏、竖屏。 接下来到strings.xml加入
<string name="yijianqingli" >Kill All</string>
在values-zh-rCN/strings.xml加 入
<string name="yijianqingli">一键清理</string>
#接下来处理smali部分,打开\smali\com\android\s ystemui\SystemUIService.smali,在最后加入按钮事 件,注意line的值要紧接原文件的值:
.method public openTaskManager(Landroid/view/View;)V.locals 5 .parameter "view"
.prologue .line 96 :try_start_0
.line 97 new-instance v1, Landroid/content/Intent;
invoke-direct {v1}, Landroid/content/Intent;-><init>()V
.line 98 .local v1, intent:Landroid/content/Intent; const-string v2, "android.intent.action.MAIN"#⑴
invoke-virtual {v1, v2}, Landroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;
.line 99 const/high16 v2, 0x1000
invoke-virtual {v1, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent;
.line 100 const-string v2, "com.lbe.security"#⑵
const-string v3, "com.lbe.security.ui.desktop.shortcut.CleanActivity"#⑶
invoke-virtual {v1, v2, v3}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
invoke-virtual {p0, v1}, Lcom/android/systemui/SystemUIService;->startActivity(Landroid/content/Intent;)V
.line 101 #iget-object v1, p0, Lcom/android/systemui/SystemUIService;->mRecentsPanel:Lcom/android/systemui/recent/RecentsPanelView;
#invoke-virtual {v1}, Lcom/android/systemui/recent/RecentsPanelView;->dismiss()V
#invoke-virtual {p0}, Lcom/android/systemui/SystemUIService;->onBackPressed()V
#const/4 v1, 0x0
#invoke-virtual {p0, v1, v1}, Lcom/android/systemui/recent/RecentsPanelView;->show(ZZ)V
:try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
.line 102 .end local v1 #intent:Landroid/content/Intent;
:goto_0 return-void
.line 103 :catch_0 move-exception v0
.line 104 .local v0, e:Ljava/lang/Exception; invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
goto :goto_0
.end method
#关于(1)(2)(3)的修改,我们不需要启动主程序而是 启动它内部的一键清理功能。反编译App Arbiter,打 开AndroidManifest.xml,
(1)填action动作,(2)填 package名就是apk名,(3)填需要调用的activity,就 是我们需要的“一键清理”。填法是 package名+activit y中的android:name。
▇这一步将按钮链接到程序App Arbiter的一键清理功能的activity,所以这里可以自己定义到那个软件的一键清理,我定义到了lbe的,链接的软件一定要已经安装了,不过安装在data不知道行不行,我的都是系统的!大家自测。。。
#现在可以回编译替换文件了,记得把修改好的App A rbiter也刷进手机。 修改好的App