Де 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.