Можно ли изменить кнопку Android с помощью Javassist?
Я хочу добавить отметку, когда разработчик вызывает какой-то метод, например preformClick
, но я получаю исключение:javassist.NotFoundException: C:\Users\xyz\AppData\Local\Android\android-sdk\platforms\android-21\android.jar.
Вот мой код, я использую AfterBurner, это обертка для Android 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";
}
});
1 ответ
Вы имеете в виду путь jar сборки (.class). Тем не менее, время выполнения Android относится к файлам формата dex в Dalvik OS, если я правильно понял. Попробуйте ClassPool pool = ClassPool.getDefault(getApplicationContext()); В моем случае я попытался использовать javassist для замены частного метода в android.net.wifi.p2p.WifiP2pService. Но я вижу, что все частные методы имеют cachedName, например, доступ $12596. Я попытался найти способ сопоставить его с реальным частным именем API. У кого-нибудь есть идея?