0

Xposed框架中名为“网络速度指示器”的应用程序可以使网络速度显示在android状态栏上。如何做到这一点?

我查找了一些其他问题,例如自定义 android 状态栏。它说“这与 android 开发无关,而是 android hacking。:) 但它真的很简单,你需要 root,从设备中提取 framework-res.apk . 解压它(7Zip 或 WinRar),你有大量的 pngs。你只需要编辑它们并重新打包 apk,签名并将其推送到设备并重新启动。tadda"。

xposed也这样做吗?

4

1 回答 1

0

Xposed 实际上以一种更有趣的方式工作,它/system/bin/app_process通过添加一个 jar(/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar准确地说)进行修改,它允许您“挂钩”到任何方法调用。基本上,您可以在任何方法之前或之后运行自己的代码。以下是来自GitHub 页面的一些示例代码:

package de.robv.android.xposed.mods.tutorial;

import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
import android.graphics.Color;
import android.widget.TextView;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class Tutorial implements IXposedHookLoadPackage {
    public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
        if (!lpparam.packageName.equals("com.android.systemui"))
            return;

        findAndHookMethod("com.android.systemui.statusbar.policy.Clock", lpparam.classLoader, "updateClock", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                TextView tv = (TextView) param.thisObject;
                String text = tv.getText().toString();
                tv.setText(text + " :)");
                tv.setTextColor(Color.RED);
            }
        });
    }
}

这挂钩到系统 UI 时钟更新方法并添加:)到时间,加上使文本变为红色。希望这能让您对 Xposed 中的工作原理有所了解。

明显的好处是您没有替换原始应用程序,因此不需要解压缩签名推送过程。只需拥有原始应用程序、Xposed 框架和您的模块。

编辑:此外,仅解压缩和替换 PNG 不会让您访问工作代码,这就是为什么状态栏中的网络速度需要您使用 Xposed - 您必须“挖掘”创建文本的代码显示在状态栏中。

于 2016-12-03T14:40:18.240 回答