【问题标题】:Is it possible to modify the android button with javassist是否可以使用 javassist 修改 android 按钮
【发布时间】:2015-01-19 07:41:17
【问题描述】:

我想在开发者调用某个方法时添加一些标记,比如preformClick,但我得到一个异常:javassist.NotFoundException: C:\Users\xyz\AppData\Local\Android\android-sdk\platforms\android-21\android.jar.

这是我的代码,我使用AfterBurner,它是 javassist 的 android 包装器:

AfterBurner afterBurner = new AfterBurner();
ClassPool classPool = new ClassPool(ClassPool.getDefault());
            classPool.insertClassPath("C:\\Users\\xyz\\AppData\\Local\\Android\\android-sdk\\platforms\\android-21\\android.jar");
            afterBurner.addOrInsertMethod(new InsertableMethod(classPool.get(Button.class.getName())) {

                @Override
                public String getFullMethod() throws AfterBurnerImpossibleException {
                    return "public void mark() { ___BODY___ }";
                }

                @Override
                public String getBody() throws AfterBurnerImpossibleException {
                    String body = "android.util.Log.d(\"AfterBurner Demo\", \""
                            + "set click listener"
                            + " [\" + System.identityHashCode(this) + \"] \u27F3 "
                            + "\");";
                    return body;
                }

                @Override
                public String getTargetMethodName() throws AfterBurnerImpossibleException {
                    return "mark";
                }

                @Override
                public String getInsertionAfterMethod() {
                    return "setOnClickListener";
                }
            });

【问题讨论】:

    标签: java android bytecode javassist


    【解决方案1】:

    您指的是构建时间 jar (.class) 路径。但是,如果我理解正确的话,Android 运行时指的是 Dalvik OS 上的 dex 格式文件。尝试 ClassPool 池 = ClassPool.getDefault(getApplicationContext()); 就我而言,我尝试使用 javassist 替换 android.net.wifi.p2p.WifiP2pService 中的私有方法。但我可以看到所有私有方法都有 cachedName,比如 access$12596。我试图找到一种方法将其映射到真正的私有 API 名称。有人有想法吗?

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2017-08-10
      • 2016-01-13
      相关资源
      最近更新 更多