亲警卫私人建设者

时间:2016-07-29 08:24:22

标签: android proguard dexguard

我在我们的项目中使用Kofax,它使用了很多Reflection和Robogiuice。我们正在使用Dexguard来混淆我们的代码。我们遇到的一个问题是私有构造函数被剥离了。我的代码中已经有了这个:

-keepclassmembers class *  {
   private <init>(...);
}

但它没有帮助,我的一些类的构造函数仍然被剥离。

  

1)在&gt; com.kofax.mobile.sdk.capture.MainModule $ ReflectionMakeSize中找不到合适的构造函数。类必须具有&gt;使用@Inject注释的一个(且仅一个)构造函数或不是私有的零参数&gt;构造函数。                                                                     at&gt; com.kofax.mobile.sdk.capture.MainModule $ ReflectionMakeSize.class(Unknown&gt; Source)                                                                    at&gt; com.kofax.mobile.sdk.capture.MainModule.configure(:145)

任何人都知道如何解决这个问题?

EDIT。

我刚刚发现,只删除private static class的构造函数,其他类的构造函数仍在那里。

任何人都知道为什么?

2 个答案:

答案 0 :(得分:0)

错误消息显示您必须具有使用@Inject注释的构造函数或不带参数的非私有构造函数。

所以我会添加这样的规则:

-keepclassmembers class * {
    !private <init>();
    @com.google.inject.Inject <init>(...);
    @javax.inject.Inject <init>(...);
}

我添加了com.google.inject注入注释以及来自javax.inject的注释,因为我不确定从kofax引用哪一个。您可以删除不需要的那个。

答案 1 :(得分:-1)

其中一个解决方案可能是在构造函数之前添加@Keep注释
例如:

@Keep
private Adapter(FragmentActivity mActivity, List<RowModel> list) {
    super(mActivity, list);
}