Giter Club home page Giter Club logo

jsposed's Introduction

JsPosed

JsPosed 是一款通过js代码调用xposed相关功能的框架,支持热部署,热更新,无需重启即可生效

下载体验

  1. 编译项目或 下载apk ,安装到有xposed环境的设备上

  2. 下载tmp.js 导入到手机 /data/local/tmp 目录下

  3. 第一次需要激活重启,重启后再次打开 app即可生效

  4. 可以通过修改 tmp.js 内容,保存后杀掉app进程再启动即可生效

wiki

完整使用说明请查看wiki

开始使用

配置依赖


implementation 'com.wrbug:jsposed:0.0.2'

初始化

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
        String js=...
        boolean debug=...
        //初始化JsPosed
        JsPosedExecutor executor = JsPosedExecutor.init(lpparam, jsContent, debug);
        //执行js方法
        executor.run(fun);
    }
参数说明
参数 说明
lpparam handleLoadPackage方法参数
jsContent js文本
debug 打印debug日志
fun 执行方法,一般为入口方法
注意

js文本可以使用硬编码或通过文件的形式获取,使用文件时需注意hook的应用是否有权限读取文件. 可以参考XposedInit.java

简单js实现

function start(){
    var packageName = Env.packageName();
    if (packageName != "com.wrbug.jsposed") {
        return
    }
    
    //hook MainActivity#onCreate 方法
    JsPosedHelpers.findAndHookMethod("com.wrbug.jsposeddemo.MainActivity", "onCreate", ["android.os.Bundle"], null, function (methodHookParam) {
            //获取thisObject变量
            var activity = JsPosedHelpers.getObjectField(methodHookParam, "thisObject");
            // 获取tv变量
            var tv = JsPosedHelpers.getObjectField(activity, "tv");
            // 获取mCheckBox变量
            var checkbox = JsPosedHelpers.getObjectField(activity, "mCheckBox");
            //通过 idName获取btn
            var btn = JsContext.findViewById(activity, "btn")
            // 设置tv文本
            JsView.setText(tv, "Jsposed running");
            JsView.setText(btn, "点击跳转");
            // 设置tv文本颜色
            JsView.setTextColor(tv, 0xffff0000);
            // 设置tv字体大小
            JsView.setTextSize(tv, 20);
            // 设置tv 点击事件
            JsView.setOnclickListener(tv, function (view) {
                JsView.toggle(checkbox)
            });
            JsView.setOnclickListener(btn, function (view) {
                // 跳转到 Main2Activity
                JsContext.startActivity(activity, "com.wrbug.jsposeddemo.Main2Activity", {
                    "a": "test1",
                    "b": ["test2","java.lang.String"],
                    "c": 12345,
                    "d":[12345,"long"]
                })
            });
            // checkbox 事件监听
            JsView.setOnCheckedChangeListener(checkbox, function (view, isChecked) {
                JsView.setText(tv, "checkBox status:" + isChecked);
            })
        })
    }

我们在框架内置了许多Js方法,大多数方法与原生方法命名相同,由于js无法操作原生对象,所以Js方法第一个参数一般穿对象实例,完整方法请查看方法对照表

jsposed's People

Contributors

wrbug avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.