有一个.jar文件,我需要在.class文件中更改一个私有方法实现。下面的方法
private void vibrate() {
Vibrator vibrator = (Vibrator)RongContext.getInstance().getSystemService("vibrator");
vibrator.vibrate(new long[]{0L, 200L, 250L, 200L}, -1);
}
此私有方法由另一个私有方法调用
private void notify(Context context, Message message, int left) {
boolean isInBackground = SystemUtils.isInBackground(context);
if(message.getConversationType() != ConversationType.CHATROOM) {
if(isInBackground) {
RongNotificationManager.getInstance().onReceiveMessageFromApp(message);
} else if(!this.isInConversationPager(message.getTargetId(), message.getConversationType()) && left == 0 && System.currentTimeMillis() - this.lastSoundTime > 3000L) {
this.lastSoundTime = System.currentTimeMillis();
int ringerMode = NotificationUtil.getRingerMode(context);
if(ringerMode != 0) {
if(ringerMode != 1) {
this.sound();
}
this.vibrate();
}
}
}
}
我需要用这样的if-block包围它
private void vibrate() {
if(xxx){
Vibrator vibrator = (Vibrator)RongContext.getInstance().getSystemService("vibrator");
vibrator.vibrate(new long[]{0L, 200L, 250L, 200L}, -1);
}
}
所以我只是想知道是否还有改变私有方法的工具,比如改变方法Id使用ClassLoader,或其他什么。
答案 0 :(得分:2)
使用java反射无法做到这一点。
您可以使用AOP或字节码操作库(如CGlib或Javassist)执行此操作。