Android Studio lưu tệp ánh xạ ProGuard ở đâu?


182

Trong Android Studio, các tệp ánh xạ ProGuard được tạo ở đâu sau khi biên dịch APK đã ký?

Tôi không chắc là nó không hoạt động hay tôi chỉ quên đường dẫn tệp và tìm kiếm Google / Stack Overflow bắt buộc của tôi không trả lời được điều này


1
nó được giải thích ở đây chính thức firebase.google.com/docs/crash/ khăn
Jayakrishnan PM

3
@JayakrishnanPM vui mừng khi thấy Google có khoảng 3 năm sau đó.
CQM

Câu trả lời:


272

Nó nên được đặt tại build/outputs/proguard/release/mapping.txtthư mục của mô-đun ứng dụng của bạn.

Trong phiên bản mới nhất của ProGuard và Android Studio, tệp được đặt tại build/outputs/mapping/release/mapping.txt.


5
Thông tin thêm về các tệp và đường dẫn được tạo: developer.android.com/studio/build/shrink-code.html
Helton Isac

Nếu Instant Run của bạn được bật, bạn có thể không thấy tệp ánh xạ. Vô hiệu hóa Instant Run và xây dựng lại.
Faizan Mubasher

1
Sau khi cập nhật lên Gradle 6.2.2 / Gradle Plugin 3.6.1, các đường dẫn đã thay đổi cho chúng tôi. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtlà những con đường mới.
Carsten Hagemann

75

Đối với tôi họ đang ở 'build/outputs/mapping/release'


16
'xây dựng / đầu ra / ánh xạ / phát hành /
maps.txt

1
Vâng, cái đó là hoàn hảo cho studio android 2.3.2
Subho

1
app / build / output / maps / release / maps.txt bc có một thư mục xây dựng riêng không chứa tệp ánh xạ ...
NukeouT

39

Tôi thấy nó dễ dàng hơn để cấu hình proguard để ghi tệp maps.txt vào một vị trí bên ngoài build/cây thư mục, để nó có thể được kiểm tra thuận tiện hơn trong kiểm soát phiên bản.

Để đạt được điều này, hãy đặt nó trong proguard-rules.pro tập tin :

-printmapping mapping.txt

Điều này (rất có thể) sẽ đặt nó trong cùng thư mục với proguard-rules.protệp của bạn . Cuối cùng, bạn có thể muốn viết nó vào cùng thư mục với tệp APK của bạn và với một tên tương đương (có thể bao gồm hương vị, kiểu xây dựng, v.v.).

Lưu ý: theo kinh nghiệm của tôi, điều này không bị ghi đè bởi tệp mẫu proguard (được đề xuất bởi một người bình luận cho người khác câu trả lời ở đây).

CẬP NHẬT: Nếu bạn có nhiều hương vị sản phẩm, thì đây là một giải pháp tốt hơn nhiều: https://stackoverflow.com/a/31116608/444761


1
Điều này tốt hơn giải pháp của tôi, như bạn nói bạn có thể đặt nó dưới sự kiểm soát phiên bản.
Clive Jefferies

Tại sao bạn muốn kiểm soát phiên bản này? bạn cần nó cho mọi APK bạn phát hành một cách riêng biệt vì nó phụ thuộc vào bản dựng. vì bạn phải tải lên / kiểm tra một apk như vậy một cách riêng biệt từ nguồn, thực sự không cần phải kiểm tra nó trong VCS nguồn!?
Denny1989

@ Denny1989 không chắc ý của bạn là gì. Tôi xây dựng một APK và lưu trữ nó bên ngoài kiểm soát phiên bản. Tôi phải giữ tập tin bản đồ ở đâu đó. Tôi có thể lưu trữ nó cùng với APK, nhưng tôi thấy nó sạch hơn để kiểm soát phiên bản. Tuy nhiên, tôi chỉ có một APK phát hành cho mỗi dự án nên YMMV.
Đánh dấu

36

Tôi thấy rằng nó không được tạo, vì vậy tôi đã thêm nó vào tệp quy tắc

-printmapping build/outputs/mapping/release/mapping.txt

1
Tôi thấy rằng printmapping bị ghi đè bởi một tệp proguard mẫu mà tôi đang sử dụng!
Cậu bé

1
điều này đã làm việc và tạo ra tất cả các tập tin đầu ra proguard cho tôi.
j2emanue

16

Nó khá muộn để trả lời câu hỏi này nhưng chỉ trong trường hợp ai đó cần câu trả lời của tôi.

Vị trí của tệp Ánh xạ để khử nhiễu:

ProGuard lưu tệp trong ứng dụng / xây dựng / đầu ra / ánh xạ / FLAVOR / phát hành / maps.txt

Nói chung trong chế độ gỡ lỗi, bạn không cần tệp ánh xạ vì thông thường chức năng che giấu bị vô hiệu hóa. Nếu không phải như vậy thì hãy chắc chắn trong tệp build.gradle mà bạn có mã bên dưới cho biến thể gỡ lỗi.

debug {
    minifyEnabled false
    debuggable true
}

Một số Gotchas:

Tệp maps.txt bị ghi đè mỗi khi bạn tạo bản phát hành với ProGuard, vì vậy trước tiên hãy sao lưu tệp đó trước khi tạo bản phát hành mới. Nó sẽ giúp ngăn chặn dấu vết ngăn xếp từ một phiên bản cũ hơn của ứng dụng của bạn.

Ngoài ra, có hai cách để làm xáo trộn mã của bạn:

1. Tải tệp maps.txt của bạn lên Google play Console:

Khi xuất bản ứng dụng của bạn trên Google Play, bạn có thể tải lên tệp maps.txt cho từng phiên bản APK của mình. Sau đó, Google Play sẽ khử các dấu vết ngăn xếp đến từ các sự cố do người dùng báo cáo để bạn có thể xem lại chúng trong Bảng điều khiển Google Play.

2. Sử dụng công cụ sdk cục bộ lấy lại.sh/retrace.bat:

Đôi khi bạn muốn chạy phiên bản phát hành của ứng dụng của mình (bằng cách thay đổi biến thể xây dựng thành phát hành và chạy nó) để kiểm tra chéo và sửa lỗi để nó không xảy ra trong sản xuất (khi được phát hành cho cửa hàng play).

Để tự chuyển đổi một dấu vết ngăn xếp bị che khuất thành một dấu vết có thể đọc được, hãy sử dụng tập lệnh truy xuất ( lấy lại.bat trên Windows; lấy lại.sh trên Mac / Linux ).

Nó nằm trong <sdk-root>/tools/proguard/bin/thư mục.

<sdk-root> là nơi cài đặt tất cả các thư viện và sdks Android của bạn.

Tập lệnh lấy tệp maps.txt và theo dõi ngăn xếp của bạn, tạo ra một dấu vết ngăn xếp mới, có thể đọc được.

Lệnh Cú pháp:

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

Ví dụ:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Tôi thích phiên bản cục bộ của obfuscating vì khá tiện dụng để kiểm tra trước lỗi sản xuất.

Tôi hy vọng nó sẽ giúp.


12

Tôi đang sử dụng phiên bản Android Studio 2.2.2 . Đối với tôi, nó nằm ở các vị trí sau:

Để gỡ lỗi: \app\build\outputs\mapping\debug\mapping.txt

Để phát hành: \app\build\outputs\mapping\release\mapping.txt


11

nhập mô tả hình ảnh ở đây

Đây là một bức ảnh - bạn sẽ tìm thấy nó trong thư mục ánh xạ:


2

Bởi vì tôi bị câm và bị lạc ngay cả khi ai đó cho tôi biết tập tin ở đâu:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.