Android Studio จะบันทึกไฟล์การจับคู่ ProGuard ที่ไหน


182

ใน Android Studio ไฟล์การทำแผนที่ ProGuard สร้างขึ้นที่ไหนหลังจากรวบรวม APK ที่ลงชื่อแล้ว?

ฉันไม่แน่ใจว่ามันใช้งานไม่ได้หรือถ้าฉันลืมเส้นทางไฟล์และการค้นหา Google / Stack Overflow ภาคบังคับของฉันไม่ได้ตอบคำถามนี้


1
มันจะมีการอธิบายอย่างเป็นทางการที่นี่ firebase.google.com/docs/crash/...
Jayakrishnan PM

3
@JayakrishnanPM ดีใจที่ได้เห็น Google มาถึง 3 ปีต่อมา
CQM

คำตอบ:


272

ควรอยู่build/outputs/proguard/release/mapping.txtในไดเรกทอรีของโมดูลแอปพลิเคชันของคุณ

ในรุ่นล่าสุดของ ProGuard และ Android สตูดิโอ, 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คือเส้นทางใหม่
Carsten Hagemann

75

สำหรับฉันพวกเขาอยู่ที่ 'build/outputs/mapping/release'


16
'build / outputs / mapping / release / mapping.txt'
aleb

1
ใช่ว่าเหมาะสำหรับ android studio 2.3.2
Subho

1
app / build / outputs / mapping / release / mapping.txt bc มีโฟลเดอร์
บิลด์

39

ฉันพบว่าสะอาดกว่าการกำหนดค่า proguard ให้เขียนไฟล์ mapping.txt ไปยังตำแหน่งที่อยู่ด้านนอกbuild/ทรีไดเรกทอรีเพื่อให้สามารถตรวจสอบได้สะดวกยิ่งขึ้นในการควบคุมเวอร์ชัน

เพื่อให้บรรลุนี้ใส่ในproguard-rules.proไฟล์ของคุณ:

-printmapping mapping.txt

สิ่งนี้จะเป็นไปได้มากที่สุดในไดเรกทอรีเดียวกับproguard-rules.proไฟล์ของคุณ ท้ายที่สุดคุณอาจต้องการเขียนลงในไดเรกทอรีเดียวกับไฟล์ APK ของคุณและมีชื่อเทียบเท่า (ซึ่งอาจรวมถึงรสชาติ, ประเภทการสร้าง ฯลฯ )

หมายเหตุ: จากประสบการณ์ของฉันไฟล์นี้ไม่ได้ถูกแทนที่ด้วยไฟล์เทมเพลต proguard (ซึ่งผู้วิจารณ์เสนอให้กับคำตอบอื่นที่นี่)

อัปเดต: หากคุณมีผลิตภัณฑ์หลายรสชาตินี่เป็นทางออกที่ดีกว่า: https://stackoverflow.com/a/31116608/444761


1
นี่ดีกว่าโซลูชันของฉันเหมือนอย่างที่คุณบอกว่าคุณสามารถวางไว้ภายใต้การควบคุมเวอร์ชัน
Clive Jefferies

ทำไมคุณต้องการควบคุมเวอร์ชันนี้ คุณต้องการมันสำหรับทุก ๆ APK ที่คุณปล่อยอย่างแยกต่างหากเพราะมันสร้างแบบพึ่งพา ในขณะที่คุณต้องอัปโหลด / เช็คอิน apk แยกจากแหล่งที่จริงแล้วไม่จำเป็นต้องตรวจสอบในแหล่ง VCS!
Denny1989

@ Denny1989 ไม่แน่ใจว่าคุณหมายถึงอะไร ฉันสร้าง APK และเก็บไว้นอกการควบคุมเวอร์ชัน ฉันต้องเก็บไฟล์การจับคู่ไว้ที่อื่น ฉันสามารถจัดเก็บไว้ข้าง APK แต่ฉันคิดว่ามันดีกว่าที่จะควบคุมเวอร์ชัน อย่างไรก็ตามฉันมี APK หนึ่งรุ่นต่อหนึ่งโครงการดังนั้น YMMV
มาร์ค

36

ฉันพบว่ามันไม่ได้ถูกสร้างขึ้นดังนั้นฉันจึงเพิ่มสิ่งนี้ลงในไฟล์กฎ

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

1
ฉันพบว่าการพิมพ์แมปถูกแทนที่ด้วยไฟล์เทมเพลตที่ฉันใช้!
Boy

1
สิ่งนี้ทำงานและสร้างไฟล์เอาต์พุต proguard ทั้งหมดสำหรับฉัน
j2emanue

16

มันค่อนข้างสายเกินไปที่จะตอบคำถามนี้ แต่ในกรณีที่มีคนต้องการคำตอบของฉัน

ตำแหน่งของไฟล์การแม็พเพื่อยกเลิกการแสดงข้อความ:

ProGuard บันทึกไฟล์ในแอพ แอพ / บิลด์ / เอาท์พุท / การแมป / FLAVOR / ปล่อย / แมป.txt

โดยทั่วไปในโหมดแก้ไขข้อบกพร่องคุณไม่จำเป็นต้องใช้ไฟล์การจับคู่เนื่องจากโดยทั่วไปแล้วจะมีการปิดการใช้งาน obfuscation หากไม่ใช่กรณีดังกล่าวโปรดตรวจสอบให้แน่ใจในไฟล์ build.gradle ว่าคุณมีรหัสด้านล่างสำหรับชุดการดีบัก

debug {
    minifyEnabled false
    debuggable true
}

บาง Gotchas:

ไฟล์ mapping.txt จะถูกเขียนทับทุกครั้งที่คุณสร้าง build build ด้วย ProGuard ดังนั้นก่อนอื่นให้สำรองไฟล์นั้นก่อนที่จะสร้าง release ใหม่ มันจะช่วยในการติดตามสแต็คที่ยุ่งเหยิงจากแอปของคุณเวอร์ชั่นเก่า

นอกเหนือจากนั้นมีสองวิธีในการทำให้งงงวยรหัสของคุณ:

1. อัปโหลดไฟล์ mapping.txt ของคุณไปยัง Google play Console:

เมื่อเผยแพร่แอปของคุณใน Google Play คุณสามารถอัปโหลดไฟล์ mapping.txt สำหรับ APK แต่ละเวอร์ชันได้ จากนั้น Google Play จะยกเลิกการติดตามสแต็กขาเข้าจากปัญหาที่ผู้ใช้รายงานเพื่อให้คุณสามารถตรวจสอบได้ใน Google Play Console

2. ใช้เครื่องมือ sdk โลคัล retrace.sh/retrace.bat:

บางครั้งคุณต้องการเรียกใช้แอพเวอร์ชั่นที่วางจำหน่าย (โดยการเปลี่ยนชุดตัวสร้างเป็นรุ่นที่วางจำหน่ายและเรียกใช้) เพื่อตรวจสอบและแก้ไขข้อผิดพลาดเพื่อไม่ให้เกิดปัญหาในการผลิต (เมื่อวางจำหน่ายที่ร้านค้า)

หากต้องการแปลงสแต็กการติดตามแบบ obfuscated เป็นไฟล์ที่อ่านได้ด้วยตัวเองให้ใช้สคริปต์retrace ( 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

ฉันชอบเวอร์ชั่นในท้องถิ่นของ obfuscating เนื่องจากค่อนข้างสะดวกในการตรวจสอบข้อผิดพลาดการผลิตล่วงหน้า

ฉันหวังว่ามันจะช่วย


12

ฉันกำลังใช้รุ่นAndroid 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.