Предоставляет ли Proguard обеспечение одного и того же сопоставления, если ни один источник не изменился?
В случае, если я
создать проект
очистить все двоичные файлы
постройте его снова (исходный/ресурс и т.д. не изменился).
Предоставляет ли Proguard один и тот же файл mapping.txt?
Ответ 1
ProGuard детерминирован: для одного и того же входа он будет генерировать тот же результат.
Однако есть одна тонкость: если операционная система перечисляет входные файлы в каталоге (особенно файлы классов, которые не находятся внутри архива) в другом порядке, тогда они могут обрабатываться в другом порядке, а выход может быть отличается.
Ответ 2
Это может произойти, но я не думаю, что proguard гарантирует это.
Я нашел это в документации Proguard, которая позволит вам повторно использовать файл mapping.txt, чтобы избежать изменений в сопоставлениях
-applymapping filename
Указывает на повторное использование заданного сопоставления имен, которое было распечатано в предыдущем запуске Profur. Классы и члены класса, перечисленные в файле сопоставления, получают имена, указанные вместе с ними. Классы и члены класса, которые не упомянуты, получают новые имена. Отображение может относиться к классам ввода, а также к библиотечным классам. Этот параметр может быть полезен для инкрементной обфускации, то есть обработки надстроек или небольших патчей к существующей части кода. Если структура кода существенно изменится, ProGuard может распечатать предупреждения о том, что применение сопоставления вызывает конфликты. Вы можете уменьшить этот риск, указав опцию -useuniqueclassmembernames в обоих запусках обфускации. Допускается только один файл сопоставления. Применяется только при запутывании.
Ответ 3
Если вы хотите получить гарантию, вы должны использовать файл сопоставлений в качестве входа в процесс обфускации. Но тогда вы должны тщательно проверить все предупреждения о конфликтах, связанных с этим файлом сопоставления. Если вы проигнорируете это, вы можете получить тонкие ошибки при работе с отражением.