Где Android Studio сохраняет файл сопоставления ProGuard?

182

В Android Studio, где файлы сопоставления ProGuard генерируются после компиляции подписанного APK?

Я не уверен, что он не работает или я просто забыл путь к файлу, и мой обязательный поиск в Google / Stack Overflow не ответил на этот вопрос.

НКИ
источник
1
это объясняется здесь официально firebase.google.com/docs/crash/...
Джайякришнана ПМ
3
@JayakrishnanPM рад видеть, что Google обошел это 3 года спустя.
CQM

Ответы:

272

Он должен находиться build/outputs/proguard/release/mapping.txtв каталоге вашего модуля приложения.

В последней версии ProGuard и Android Studio этот файл находится по адресу build/outputs/mapping/release/mapping.txt.

Скотт Барта
источник
5
Дополнительная информация о созданных файлах и пути к ним: developer.android.com/studio/build/shrink-code.html
Helton Isac,
Если ваш Мгновенный запуск включен, возможно, вы не сможете увидеть файл сопоставления. Отключить мгновенный запуск и построить снова.
Файзан Мубашер
1
После обновления до Gradle 6.2.2 / Gradle Plugin 3.6.1 пути для нас изменились. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtновые пути.
Карстен Хагеманн
75

Для меня они в 'build/outputs/mapping/release'

Том
источник
16
'build / output / mapping / release /
mapping.txt
1
Да, что идеально подходит для Android Studio 2.3.2
Subho
1
В app / build / output / mapping / release / mapping.txt была отдельная папка сборки, в которой не было файла сопоставления ...
NukeouT
39

Я обнаружил, что лучше настроить proguard для записи файла mapping.txt в папку за пределами build/дерева каталогов, чтобы его было удобнее проверять в управлении версиями.

Для этого поместите это в свой proguard-rules.proфайл:

-printmapping mapping.txt

Это (скорее всего) поместит его в тот же каталог, что и ваш proguard-rules.proфайл. В конечном счете, вы, вероятно, захотите записать его в тот же каталог, что и ваш APK-файл, и с эквивалентным именем (которое может включать аромат, тип сборки и т. Д.).

Примечание: по моему опыту, это не отменяется файлом шаблона proguard (который был предложен комментатором для другого ответа здесь).

ОБНОВЛЕНИЕ: если у вас есть несколько вариантов продукта, то это гораздо лучшее решение: https://stackoverflow.com/a/31116608/444761

отметка
источник
1
Это лучше, чем моё решение, так как вы говорите, что можете поставить его под контроль версий.
Клайв Джеффрис
почему вы хотите контролировать версию? он нужен вам для каждого APK, который вы выпускаете отдельно, так как он зависит от сборки. так как вы должны загрузить / проверить такой apk отдельно от источника, на самом деле нет необходимости проверять его в исходном VCS !?
Denny1989
@ Denny1989 не уверен, что ты имеешь в виду. Я создаю APK и храню его вне контроля версий. Я должен где-то хранить файл сопоставления. Я мог бы хранить его рядом с APK, но я считаю, что он чище для контроля версий. Тем не менее, у меня только один релиз APK на проект, так что YMMV.
Марк
36

Я обнаружил, что это не генерируется, поэтому я добавил это в файл правил

-printmapping build/outputs/mapping/release/mapping.txt
Клайв Джеффрис
источник
1
Я обнаружил, что printmapping был отменен файлом proguard шаблона, который я использовал!
Мальчик
1
это сработало и сгенерировало все выходные файлы proguard для меня.
j2emanue
16

Уже довольно поздно, чтобы ответить на этот вопрос, но на тот случай, если кому-то понадобится мой ответ.

Расположение файла сопоставления для деобфускации:

ProGuard сохраняет файл в приложении app / build / output / mapping / FLAVOR / release / mapping.txt

Обычно в режиме отладки вам не нужен файл сопоставления, потому что там обычно запутывание отключено. Если это не тот случай, убедитесь, что в файле build.gradle у вас есть код ниже для варианта отладки.

debug {
    minifyEnabled false
    debuggable true
}

Некоторые Gotchas:

Файл mapping.txt перезаписывается каждый раз, когда вы создаете сборку релиза с помощью ProGuard, поэтому сначала создайте резервную копию этого файла, прежде чем создавать новый выпуск. Это поможет запутать трассировку стека из более старой версии вашего приложения.

Кроме этого есть два способа запутать ваш код:

1. Загрузите файл mapping.txt в консоль Google Play:

При публикации приложения в Google Play вы можете загрузить файл mapping.txt для каждой версии вашего APK. Затем Google Play деобфусцирует следы входящих стеков от проблем, о которых сообщают пользователи, чтобы вы могли просмотреть их в консоли Google Play.

2. Используйте локальный инструмент SDK retrace.sh/retrace.bat:

Иногда вы хотите запустить выпускную версию вашего приложения (изменив вариант сборки на выпуск и запустив его), чтобы перепроверить и исправить ошибки, чтобы этого не произошло в рабочей среде (при выпуске в play-store).

Чтобы самостоятельно преобразовать запутанную трассировку стека в читабельную, используйте скрипт retrace ( retrace.bat в Windows; retrace.sh в Mac / Linux ).

Он находится в <sdk-root>/tools/proguard/bin/каталоге.

<sdk-root> это место, где были установлены все ваши библиотеки Android и SDK.

Сценарий берет файл mapping.txt и трассировку стека, создавая новую читаемую трассировку стека.

Синтаксис команды:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

Например:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Я предпочитаю локальную версию запутывания, так как это очень удобно для предварительной проверки производственных ошибок.

Я надеюсь, что это помогает.

WitVault
источник
12

Я использую версию Android Studio 2.2.2 . Для меня это находится в следующих местах:

Для отладки: \app\build\outputs\mapping\debug\mapping.txt

Для выпуска: \app\build\outputs\mapping\release\mapping.txt

Фейсал Шейх
источник
11

введите описание изображения здесь

Вот это на рисунке - вы найдете его в папке картирования:

Саймон
источник
2

Потому что я тупой и теряюсь, даже когда кто-то говорит мне, где находится файл:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
фило
источник