Предупреждение proguard: конфигурация сохраняет точку входа.... но не класс дескриптора

Я настроил:

-keep ,allowoptimization,allowobfuscation,allowshrinking public class     org.jf.dexlib2.dexbacked.** {
    *;
}

но все еще получая предупреждение:

 Note: the configuration keeps the entry point 'com.trusteer.trf.dex_parser { int get_strings_count(org.jf.dexlib2.dexbacked.DexBackedDexFile); }', but not the descriptor class 'org.jf.dexlib2.dexbacked.DexBackedDexFile'

Я использую proguard версии 4.7 (в Android SDK)

Что мне делать?

Ответы

Ответ 1

Вы сказали Proguard о сохранении определенного метода void foo(Bar bar);, но для обфускации класса дескриптора Bar.

Это только проблема, если вы собираетесь вызывать метод из внешнего источника, поскольку подпись будет изменена путем обфускации.

Итак, у вас есть следующие варианты:

  • Настройте Proguard, чтобы сохранить Bar.

  • Используйте директиву -dontnote, чтобы сообщить Proguard не печатать такие заметки.

Ответ 2

Из documentemnts:

allowhrinking Указывает, что точки входа, указанные в -keep вариант может быть сокращен, даже если они должны быть сохранены в противном случае. То есть точки входа могут быть удалены на этапе усадки, но если они необходимы в конце концов, они не могут быть оптимизированы или запутаны

Итак, вам нужно удалить модификатор allowshrinking.

Ответ 3

Я проделал кое-какие операции в docs. Вы не представили весь свой файл конфигурации, но я предполагаю, что этот com.trusteer.trf.dex_parser установлен как для хранения, так и для не запутывания.

Это означает, что существует рефрен от com.trusteer.trf.dex_parser до класса с именем org.jf.dexlib2.dexbacked.DexBackedDexFile, который был либо сжат, либо обфускации. Это означает, что ссылка теперь сломана - dex_parser не может импортировать DexBackedDexFile.

Так что либо отключите сжатие и обфускацию для DexBackedDexFile, либо разрешите оптимизацию и обфускацию на dex_parser.