采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
通过反射可以去实例化一个类,而这个类在反射的时候才会动态加载.
如果在EditText中输入一个字符串(com.android.entity.Person)作为我们要实例化的类.而这个Person类和字符串在代码的任何地方都没有使用到.proguard的EntryPoint优化时,就会把这个Person类去掉.那么我们在运行的时候再EditText中输入这个字符串,通过反射去加载,会不会出现找不到这个类?或者说是proguard有其他的解决办法
你的想法很好 我有一个问题 现实如何操作?你给我个具体的步骤吧
比如: 我在代码中写了一个Shape的抽象类,我在里面定义了一个draw的方法.这个Shape类有很多子类:Triangle Circle Rectangle ..... ,并且随着项目的迭代开发这个子类还在不停的扩展,形状会越来越多. 接着在代码的其他地方只使用了Shape的父类,调用方法也是通过shape.draw()完成. 接下来就是子类的实例化了.实例的时候通过Android的EditText编辑框获取用户输入的一个字符串,比如用户手动输入packagename.Circle;等输入完成就通过反射去实例化Circle这个类.最后通过Shape持有子类的实例,调用draw方法 Class c=Class.forName( editText.getText().toString() ); Shape s=(Shape)c.newInstance(); s.draw(); 在这段代码中没有出现Shape子类(Triangle Circle Rectangle ..... )有关的字符串,proguard 的EntryPoint也不能标记上这几个子类被用到了. 因此在优化之前程序能这场运行,优化之后就会出问题
你这个确实是一个问题,这个问题我还确实遇到过,当时没办法好想重新把keep注释掉来着,让我回忆下 给你整理出来。。
恩好 非常感谢
登录后可查看更多问答,登录/注册
值得信赖的Android面试课程,赢取称心offer的不二之选
889 8
718 7
1.0k 6
819 5
624 5