Pro Guard держать частный конструктор

Я использую Kofax в нашем проекте, и он использует много Reflection и Robogiuice. Мы используем Dexguard, чтобы запутать наш код. Одна из проблем, с которыми мы столкнулись, - это удаление частного конструктора. У меня уже есть это в моем коде:

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

Но это не помогает, некоторые конструкторы моего класса все еще лишены.

1) Не удалось найти подходящий конструктор в>com.kofax.mobile.sdk.capture.MainModule$ReflectionMakeSize. Классы должны иметь> либо один (и только один) конструктор, аннотированный @Inject, либо конструктор с нулевым аргументом>, который не является закрытым. at >com.kofax.mobile.sdk.capture.MainModule$ReflectionMakeSize.class(Unknown >Source) в>com.kofax.mobile.sdk.capture.MainModule.configure(:145)

Кто-нибудь знает, как это исправить?

РЕДАКТИРОВАТЬ.

Я только что узнал, что только конструктор private static class удалены, конструктор другого класса все еще там.

Кто-нибудь знает почему?

2 ответа

Одним из решений может быть добавление @Keep аннотация перед таким конструктором
Например:

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

Сообщение об ошибке говорит, что у вас должен быть любой конструктор, который аннотирован @Inject или не приватный конструктор без аргументов.

Поэтому я бы добавил такие правила:

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

Я добавил оба, com.google.inject Вставить аннотацию, а также из javax.inject поскольку я не был уверен, какой из упомянутых от kofax. Вы можете удалить ненужный.

Другие вопросы по тегам