Де Android Studio зберігає файл відображення ProGuard?


182

Де в Android Studio створюються файли відображення ProGuard після компіляції підписаного APK?

Я не впевнений, чи він не працює чи я просто забув шлях до файлу, і мій обов’язковий пошук Google / Stack Overflow не відповів на це


1
це пояснюється тут офіційно firebase.google.com/docs/crash/…
PM Jayakrishnan

3
@JayakrishnanPM радий, що 3 роки пізніше Google обійшов його.
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

Якщо миттєвий запуск увімкнено, ви, можливо, не зможете побачити файл зіставлення. Вимкнути миттєвий запуск та створити його знову.
Faizan Mubasher

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 / outputs / mapping / release / mapping.txt'
алеб

1
Так, це ідеально підходить для андроїд-студії 2.3.2
Subho

1
app / build / outputs / mapping / release / mapping.txt bc існувала окрема папка збірки, яка не містила файл відображення ...
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
Я виявив, що друкований малюнок був перекритий файлом захисного шаблону, який я використовував!
Хлопчик

1
це працювало і генерувало для мене всі вихідні файли proguard.
j2emanue

16

На це запитання відповісти досить пізно, але про всяк випадок, коли комусь потрібна моя відповідь.

Розташування картографічного файлу для деобфукації:

ProGuard зберігає файл у додатку програми / build / outputs / 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.bat в Windows; retrace.sh на Mac / Linux ).

Він розташований у с <sdk-root>/tools/proguard/bin/ довіднику.

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

Сценарій приймає файл mapping.txt і ваш стек стеження, створюючи новий, читабельний слід стека.

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

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

Наприклад:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Я віддаю перевагу локальній версії обманювання, оскільки це досить зручно для попередньої перевірки виробничих помилок.

Я сподіваюся, що це допомагає.


12

Я використовую версію Android Studio 2.2.2 . Для мене він розташований у таких місцях:

Для налагодження: \app\build\outputs\mapping\debug\mapping.txt

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



2

Тому що я німий і розгублююся, навіть коли хтось мені каже, де файл:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.