【问题标题】:How does Xposed framework modify Android status bar?Xposed框架如何修改Android状态栏?
【发布时间】:2016-12-03 22:40:18
【问题描述】:

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

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

xposed也这样做吗?

【问题讨论】:

    标签: android root xposed


    【解决方案1】:

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

    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 - 您必须“深入研究”创建的代码状态栏中显示的文本。

    【讨论】:

    • 谢谢!看完开发教程后就清楚多了,但是“钩子”机制的工作原理仍然让我感到困惑。我知道钩子是在 jni 中实现的。为了理解这个机制,我还需要学习其他知识吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多