贱贱贱贱贱贱贱贱...吧 关注:57贴子:393
  • 1回复贴,共1

【最近任务添加一键清理】

只看楼主收藏回复

三星官方固件貌似就有类似功能,感觉还是比较实用 的。
#这里采用的是调用第三方软件实现内存清理的,平 时使用手机时我就注意到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


来自Android客户端1楼2014-03-10 14:18回复
    以下是自己研究出来的~~~~~~~
    自定义清理软件教程:用过原来的清理后台进程的时候,你会发现,清理不完全,所以就需要自己选择清理软件,也就是自己手机常用的安全软件以下以lbe为例:
    反编译lbe,打开 AndroidManifest.xml
    找到一键清理的activity,lbe的是这段:
    <activity android:theme="@*android:style/Theme.NoDisplay" android:icon="@drawable/ic_clean_shortcut" android:name=".ui.desktop.shortcut.CleanActivity" android:excludeFromRecents="true" android:launchMode="singleInstance" android:hardwareAccelerated="true">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    </intent-filter>
    </activity>
    ⑴处的两个引号之间填 action动作也就是 android.intent.action.MAIN
    ⑵填lbe的包名在开头的 package="com.lbe.security"就是包名,所以⑵处的两个引号填 com.lbe.security
    ⑶处填包名+activity名也就是 com.lbe.security ui.desktop.shortcut.CleanActivity
    然后按照上面的回编译替换回去,有lbe的不用安装lbe了,没有的记得把lbe复制到system下面改权限就得了。重启手机。感受,,具体事情自己变通,不用lbe可以用其他的,照上面的还就行了,重点是找对一键清理的activy
    关于在systemuiservice.smali里加入按钮事件。有一段是com.lbe.securiti。如果不用lbe,看楼上教程com.lbe.securiti是lbe的包名,也就是教程的⑵处,照教程修改
    至于怎么找一键清理的activity这个就看自己了。直觉和判断,还有那个在横屏竖屏的文件中添加button时要在 </FrameLayout>之前添加。


    来自Android客户端2楼2014-03-10 14:19
    回复