Где я могу найти свой BuildConfig в анализаторе APK после минимизации кода с помощью ProGuard?

Взгляните на следующие два изображения из Анализ APK в Android Studio.

  • Первый с minifyEnabled = false, и
  • еще один с minifyEnabled = true (конечно, после декодирования с помощью mapp.txt)

Где я могу найти свой BuildConfig в анализаторе APK после минимизации кода с помощью ProGuard?
minifyEnabled = false. BuildConfig есть.

Где я могу найти свой BuildConfig в анализаторе APK после минимизации кода с помощью ProGuard?
minifyEnabled = true (расшифровано с помощью mapping.txt). BuildConfig нет.

Я могу найти BuildConfig в classes.dex до минимизации, но не после минимизации. Я не могу найти никаких документов/обсуждений по этому поводу, но есть ли какое-то правило, чтобы отделить BuildConfig от classes.dex после минификации с помощью Прогард? В таком случае означает ли это, что размещать конфиденциальную информацию в BuildConfig относительно безопасно? Или, возможно, он просто спрятан в каком-то другом месте?

Моя версия ProGuard — 4.7, если это имеет значение.

7
0
1 706
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы используете какие-то переменные в BuildConfig, proguard не удалит их. согласно их руководство:

The shrinking step detects and removes unused classes, fields, methods, and attributes. The optimization step analyzes and optimizes the bytecode of the methods. The obfuscation step renames the remaining classes, fields, and methods using short meaningless names.

Кроме того, я использовал эти параметры и никогда не сталкивался с тем, что proguard удаляет мою информацию о BuildConfig.

shrinkResources true
minifyEnabled true

Спасибо за ответ. Это имеет большой смысл. И я не говорю, что теряю BuildConfig доступ к своей сборке. Моя сборка прекрасно использует информацию, хранящуюся в BuildConfig. Я просто не могу найти BuildConfig в анализаторе APK, где я могу найти его с настройками minifyEnabled false. Вы хотите сказать, что тоже не сталкивались с такой ситуацией? (Возможно, вы уже это говорите, но просто перепроверьте)

barley 27.05.2019 05:18

Я отвечаю на ваш вопрос, относительно безопасно ли размещать конфиденциальную информацию в BuildConfig. Но из того, что говорит proguard, он переименовывает поля и методы классов, используя короткие бессмысленные имена, наверное также был переименован BuildConfig и его переменные. Я также не могу найти свой BuildConfig в своей сборке proguarded на class.dex.

Tenten Ponce 27.05.2019 05:34

Прохладный! По крайней мере, я рад, что я не сумасшедший :) Подожду день и отмечу ваш ответ как лучший, если не найду лучшего.

barley 27.05.2019 05:39

«Я предполагаю, что BuildConfig также был переименован и его переменные». Однако для этой части загрузка mapping.txt должна вернуть осмысленные имена, верно? По крайней мере, для других моих классов.

barley 27.05.2019 05:41

Теперь мне тоже любопытно, ха-ха. Что я нашел в моем map.txt, так это то, что даже моих собственных объявленных статических переменных там нет. Хотя я нашел одну переменную, которая имеет отображение из BuildConfig, переменной boolean DEBUG.

Tenten Ponce 27.05.2019 06:46

Привет @TentenPonce и @barley: (1) что, если наш BuildConfig переименован, но все еще содержит конфиденциальные данные. (2) Из приведенного выше обсуждения я не смог определить окончательный вердикт. Безопасно ли хранить конфиденциальную информацию, такую ​​как учетные данные для подключения к сети, в файле build.gradle, а затем использовать их в нашем приложении production. Просьба подтвердить.

SVK 07.10.2021 15:03

согласно первому комментарию @barley: «Я не говорю, что теряю доступ к BuildConfig в своей сборке. Моя сборка прекрасно использует информацию, которая хранится в BuildConfig». Несмотря на то, что он отсутствовал после включения minifyEnabled, информация все еще существует. Принятый ответ также объяснил, почему отсутствует BuildConfig.

Tenten Ponce 07.10.2021 15:14
Ответ принят как подходящий

Дополнительной функцией этапа минимизации является встраивание констант. Это объясняет, почему BuildConfig исчезает, а значения по-прежнему существуют там, где это необходимо. Как только значения будут встроены, ссылок на класс BuildConfig больше не будет, и минификатор может полностью удалить его.

Привет, @David Liu. Значит ли это, что мы можем помещать конфиденциальные данные, такие как учетные данные сетевого подключения, в build.graldle. Будет ли он на 100% защищен от реверс-инжиниринга. Не могли бы вы уточнить ответ выше.

SVK 07.10.2021 14:59

@SVK Нет. Конфиденциальные данные все еще будут там, просто встроены непосредственно в код, а не ссылаются на BuildConfig. Эти конфиденциальные данные все еще можно увидеть, просто просканировав приложение на наличие строк.

David Liu 08.10.2021 06:05

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