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. Вы можете удалить ненужный.