Хотя я знаю как устранять проблемы, связанные с Proguard, проверка того, что при запуске приложения не произойдет сбой, занимает много времени:
proguard.cfgClean ProjectGenerate Signed App Bundle / APK... FATAL EXCEPTION: main
java.lang.NoSuchFieldError: No field xxx of type yyy
При устранении такой проблемы я не всегда уверен, сработает ли мое исправление, поэтому мне приходится повторять описанные выше шаги несколько раз (как в этой LinkageError).
Это, конечно, отнимает очень много времени, и мне бы хотелось, чтобы во время самой сборки/генерации появлялись какие-то сообщения, которые сообщали бы мне об этих ошибках во время выполнения.
Возможно, я делаю что-то в корне неправильно и поэтому ищу советы или рекомендации, которые помогли бы мне значительно сократить вышеупомянутый цикл.
Существует ли способ предсказать сбой во время выполнения сборки выпуска Android из-за обфускации Proguard?
Если да, то как мне это сделать?
@Introspective Хороший улов. Я использую «файлы правил ProGuard», но движок R8: Developer.android.com/build/shrink-code#configuration-files
Следующий совет вам очень поможет, хотя он ни в коем случае не является исчерпывающим ответом:
Когда вы Build > Generate Signed App Bundle / APK... и вы получаете следующую ошибку в консоли сборки (во время задачи minifyReleaseWithR8):
При запуске R8 обнаружены отсутствующие классы. Пожалуйста, добавьте недостающее классы или применить дополнительные правила хранения, созданные в <корневой_путь_проекта>\build\outputs\mapping\release\missing_rules.txt.
Обратите внимание на детали «отсутствующих классов»:
missing_rules.txt, требующего оператора/строки -dontwarn, не добавляйте правило -dontwarn к существующим правилам сохранения, чтобы подавить предупреждения (как предложено в R8). -keep public class com.yourorg.yourlib.MissingClassName { *; }По сути, это предотвращает превращение этих «бомб времени выполнения» (в форме «предупреждений») в ФАТАЛЬНЫЕ ИСКЛЮЧЕНИЯ во время выполнения.
Могу я спросить, почему вы используете
Proguard, когда Android Studio по умолчанию используетR8для сжатия и запутывания кода, начиная с версии плагина Gradle 3.4.0?