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]()
Узнайте больше здесь