0

I want to append some mark When the developer calls some method, like preformClick, but I get a exception:javassist.NotFoundException: C:\Users\xyz\AppData\Local\Android\android-sdk\platforms\android-21\android.jar.

Here is my code, I use AfterBurner, It's a android wrapper of javassist:

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";
                }
            });
Xu Neal
  • 21
  • 3

1 Answers1

-3

You are referring to build time jar (.class) path. However, Android runtime refers to dex format files on Dalvik OS if I understood right. Try ClassPool pool = ClassPool.getDefault(getApplicationContext()); In my case, I tried to use javassist to replace a private method in android.net.wifi.p2p.WifiP2pService. But I can see all private methods have cachedName like access$12596. I tried to find a way to map it to real private API name. Does anyone have an idea?

csdev
  • 1
  • 1