Android - Как проверить Profard obfuscation?

Я обфускал свой apk, но размер файла был уменьшен только с 12 МБ до 10,5 МБ.

Причина в том, что это лишь относительно небольшое сокращение может быть связано с тем, что мое приложение использует несколько больших библиотек, но есть ли способ проверить уровень выполняемой обфускации?

На всякий случай, это мой файл proguard-project.txt...

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

-dontwarn twitter4j.**

... и библиотеки, которые я использую, это android-support-v4.jar, acra-4.5.0.jar и twitter4j-core-4.0.2.jar.

Ответы

Ответ 1

В каталоге вашего проекта вы найдете папку Proguard, в которой вы увидите четыре текстовых файла:

dump.txt

Описывает внутреннюю структуру всех файлов классов в файле .apk

mapping.txt

Перечисляет соответствие между исходным и запутанным именем класса, метода и поля. Этот файл важен, когда вы получаете отчет об ошибке из сборки выпуска, потому что он переводит обфусцированную трассировку стека обратно в исходный класс, метод и имена членов. См. Расшифровка запутанных следов стека для получения дополнительной информации.

seeds.txt

Списки классов и участников, которые не запутаны

usage.txt

Перечисляет код, который был удален из .apk

Источник: Proguard

Надеюсь это поможет!

Ответ 2

Здесь, вероятно, более визуальный способ проверки. В новой версии Android Studio он поставляется с APK Analyzer, который позволяет пользователю исследовать то, что находится в файле APK, и удобно проверять, запущен ли ваш класс.

Ниже показано, что имя пакета и метода было запущено

Вы можете увидеть, что имя пакета и имя метода обфускации

Ответ 3

Как я могу проверить уровень запутывания, который был выполнен?

Возможно, вы сможете использовать флаг -optimizationpasses N

Определяет количество проходов оптимизации, которые должны быть выполнены. По умолчанию выполняется один проход. Многократные проходы могут привести к дальнейшим улучшениям. Если после этапа оптимизации улучшения не обнаружены, оптимизация заканчивается. Применяется только при оптимизации.

Ответ 4

Когда ProGuard обрабатывает приложение для Android, оно генерирует несколько выходных файлов, чтобы показать, что происходило на каждом этапе. Эти файлы находятся в каталоге сборки

<module_name>/build/outputs/mapping/<buildType>/

Там вы можете найти:

  • seeds.txt - ProGuard просматривает пул классов и выводит в seeds.txt список каждого класса и члена, который соответствует любым вашим keep rules. Это полезно для отладки, если написанное вами правило хранения действительно соответствует классу, который вы пытаетесь сохранить.
  • usage.txt - это фаза сжатия, когда ProGuard удаляет неиспользуемый код из приложения. При этом он выводит unused code - код, который удаляется, - на использование usage.txt. Это полезно, если вы пытаетесь выяснить, почему класс не существует во время выполнения.
  • mapping.txt - Следующее, что нужно сделать ProGuard, - это запутать как можно больше кода, то есть переименовать классы и члены в бессмысленные имена, такие как "a", "b" и т.д. При этом ProGuard печатает старое имя и новое имя для каждого класса и члена в mapping.txt. Не весь код переименован, но весь код указан в mapping.txt. Это файл, который вам нужен, если вы пытаетесь де-обфускации трассировки стека. Это позволяет вам работать в обратном направлении от запутанных имен к оригинальным именам кода.
  • dump.txt - полный список всего кода после обработки. То есть все, что осталось в файлах классов, но в менее оптимизированном формате, поэтому это огромный файл. Это может быть очень полезно, если вы хотите увидеть, что находится в ваших файлах классов, но не хотите декомпилировать файлы .class или .dex.

Вот диаграмма, которую я сделал с очень общим обзором шагов

enter image description here

Узнайте больше здесь