imxz | 发布于 2019-08-25 21:05:14 | 阅读量 452 |
发布于 2019-08-25 21:05:14 |

起因:

想要好好学习天天向上,

但是总是想玩手机,无意间发现一加手机上有这个功能,

可以锁死手机一段时间,

但是时间太少了, 20 - 60 分钟 不等, 太不给力.

所以就动手写了个扩展时间的插件.

 

需要的东西:

1.开发者助手

https://www.coolapk.com/apk/com.toshiba_dealin.developerhelper

2.Jadx

https://github.com/skylot/jadx/releases

3.Xposed框架

 

使用开发者助手分析界面得到 选择禅定时间界面的点击事件

选择时间的控件ID是

点击开始的按钮控件ID

使用Jadx 将Apk直接拖入分析

上面设置了两个点击事件,

一个是弹出选择时间的Dialog 一个是开始禅定

 我们进入MainActivity.this.a(); 方法

进入 选择列表中的时间那个相关的方法体中

aVar.a((int) R.array.preferences_duration_labels, i, (OnClickListener) new OnClickListener() {

可以看到获取列表内容的方法

 

这样 我们Hook 系统方法

getResources().getStringArray(R.array.preferences_duration_values);

getResources().getTextArray(i);

根据Int值来判断是否是需要的值,

然后返回我们需要的列表,就能达到我们需要的多定义一些时间的功能.

 

Xp插件编写教程不做过多赘述,可看下面这几个入门教程

https://www.52pojie.cn/thread-688466-1-1.html

https://blog.csdn.net/niubitianping/article/details/52571438

https://www.jianshu.com/p/8fbf9e88eb54

 

我们找到R.array中的这两个ID

public static final int preferences_duration_labels = 2130903046;
public static final int preferences_duration_values = 2130903047;

 

package cn.imxz.xpbm;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class BrickModeTimeHook implements IXposedHookLoadPackage {

    public static String[] CdTimes = new String[]{ "60" , "120" , "180" , "240" , "300" };
    public static String[] CdTimesWithFz = new String[]{ "60 分钟" , "120 分钟" , "180 分钟" , "240 分钟" , "300 分钟" };

    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {

        XposedBridge.log("App : " + loadPackageParam.packageName);
        if (loadPackageParam.packageName.equals("com.oneplus.brickmode")) {
            XposedBridge.log("AppLoad : " + loadPackageParam.packageName);
            Class clazz = loadPackageParam.classLoader.loadClass("android.content.res.Resources");

            XposedHelpers.findAndHookMethod(clazz, "getStringArray" , int.class ,new XC_MethodHook() {
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                        super.beforeHookedMethod(param);
                }

                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    if(2130903047 == (int)param.args[0])
                    {
                        param.setResult(CdTimes);
                    }
                }
            });

            XposedHelpers.findAndHookMethod(clazz, "getTextArray" , int.class ,new XC_MethodHook() {
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                }
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    if(2130903046 == (int)param.args[0])
                    {
                        param.setResult(CdTimesWithFz);
                    }
                }
            });
        }
    }
}

主要代码如上.效果如下


 

其实点击开始才是最难的一步.

2019.08.26 21.42

 

 

 

 

 


内容更新于: 2019-09-02 18:37:05
链接地址: http://imxz.cn/post/%E4%B8%80%E5%8A%A0%E7%A6%85%E5%AE%9A%E6%A8%A1%E5%BC%8FApp%E5%A2%9E%E5%8A%A0%E5%A4%9A%E7%A7%8D%E7%A6%85%E5%AE%9A%E6%97%B6%E9%97%B4

上一篇: 无

下一篇: C++与Lua交互之联调

452 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航