【android开发】
1.动态修改method注解属性值,按照https://segmentfault.com/a/11... 描述的方式不能实现
2.关键代码
final String value = changeValueAnotation.value();
InvocationHandler h = Proxy.getInvocationHandler(annotation);
// 获取 AnnotationInvocationHandler 的 memberValues 字段
Field hField = h.getClass().getDeclaredField("memberValues");
Log.e(TAG, hField.getType().getName());
// 因为这个字段事 private final 修饰,所以要打开权限
hField.setAccessible(true);
// 获取 memberValues
Map memberValues = (Map) hField.get(h);
// 修改 value 属性值
memberValues.put("declaredName", value);
3.调试发现得到的InvocationHandler并不是AnnotationInvocationHandler,而是AnnotationFactory,然后修改就失败了
4.找了好多方法大多是修改Field注解属性值,修改method注解值暂时没有找到,有处理过相关问题的大佬请多指教
安卓上的 jvm 实现是谷歌专门写的,有些东西跟甲骨文那个 java 不太一样
你断点都下来了 看到了那个 handler 的结构 那么你翻一下它的属性值在哪里 然后一层层 field 取下去就好了