当前位置: 代码迷 >> 综合 >> [积累]使用proguard混淆代码后导致构造函数not fount 问题 Proguard and reflection in Android
  详细解决方案

[积累]使用proguard混淆代码后导致构造函数not fount 问题 Proguard and reflection in Android

热度:82   发布时间:2024-01-21 14:54:43.0

在proguard的时候, 我们的类也会被混淆掉,导致出现
java.lang.NoSuchMethodException: [class android.content.Context这个错误

解决, 在proguard声明不要混淆需要实例化类的构造函数

-keepclassmembers class * extends com.hzy.tvmao.ir.engine.BaseIR{
    public <init>(android.content.Context);
}

这里写图片描述
我这里使用了一个工厂类来创建extends BaseIR的实例


/*** IREngine的工厂, 使用方式是<br>* sBaseIREngine = IREngineFactory.getBaseIR(SamsungIR.class,* TmApp.getContext());* * @author gaoshuai* */
public class IREngineFactory {
    public static BaseIR getIR(Class<? extends BaseIR> clazz, Context context, int test) {
    try {Constructor<? extends BaseIR> constructor = clazz.getDeclaredConstructor(Context.class, int.class);constructor.setAccessible(true);BaseIR a1 = (BaseIR) constructor.newInstance(context, test);LogUtil.i(a1.getName() + " ir service found");return a1;}catch (Throwable e) {e.printStackTrace();LogUtil.i("IR Throwable t.toString=" + e.toString());}return null;}public static BaseIR getIR(Class<? extends BaseIR> clazz, Context context) {
    // TODO Auto-generated method stubreturn null;}
}

http://stackoverflow.com/questions/4447145/proguard-and-reflection-in-android

  相关解决方案