2015-01-19 2 views
0
나는 개발자가 preformClick과 같은 몇 가지 방법을 호출 할 때 어떤 마크를 추가 할

와 안드로이드 버튼을 수정하는 것이 가능하지만, 나는 예외를 얻을 : 여기가와 Javassist

javassist.NotFoundException: C:\Users\xyz\AppData\Local\Android\android-sdk\platforms\android-21\android.jar. 내가 AfterBurner을 사용, 내 코드입니다, 그것은이다 javassist의 android wrapper :

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"; 
       } 
      }); 

답변

-3

빌드 시간 jar (.class) 경로를 참조하고 있습니다. 그러나 Android 런타임은 Dalvik OS에서 dex 형식 파일을 참조합니다. 시도해보십시오 ClassPool pool = ClassPool.getDefault (getApplicationContext()); 제 경우에는 javacist를 사용하여 android.net.wifi.p2p.WifiP2pService의 개인 메소드를 대체하려고했습니다. 하지만 모든 개인 메서드가 액세스 $ 12596처럼 cachedName을 볼 수 있습니다. 나는 그것을 실제 private API 이름에 매핑하는 방법을 찾으려고 노력했다. 누구나 아이디어가 있습니까?

관련 문제