Android Studio는 ProGuard 매핑 파일을 어디에 저장합니까?


182

Android Studio에서 서명 된 APK를 컴파일 한 후 ProGuard 매핑 파일은 어디에 생성됩니까?

작동하지 않거나 파일 경로를 잊어 버렸는지 확실하지 않으며 강제 Google / 스택 오버플로 검색에서 이에 응답하지 않았습니다.


1
그것은 공식적으로 여기에 설명 firebase.google.com/docs/crash/...
Jayakrishnan PM에게

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

Instant Run 이 활성화 된 경우 매핑 파일을 보지 못할 수 있습니다. 즉시 실행을 비활성화하고 다시 빌드하십시오.
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
'빌드 / 출력 /지도 / 해제 / mapping.txt'
aleb

1
네, 하나는 안드로이드 스튜디오 2.3.2에 완벽합니다
Subho

1
app / build / outputs / mapping / release / mapping.txt bc 매핑 파일이 포함되지 않은 별도의 빌드 폴더가 있습니다.
NukeouT

39

mapping.txt 파일을 외부 위치에 쓰도록 proguard를 구성하는 것이 더 깨끗하다는 것을 알았습니다. build/ 디렉토리 트리 하여 버전 관리에보다 편리하게 체크인 할 수있는 것이 더 .

이것을 달성하려면 proguard-rules.pro파일 에 이것을 넣으십시오 .

-printmapping mapping.txt

이것은 (아마도) 당신과 같은 디렉토리에 배치합니다 proguard-rules.pro 파일 . 궁극적으로 APK 파일과 동일한 디렉토리에 동일한 이름 (향기, 빌드 유형 등이 포함될 수 있음)으로 파일을 작성하려고합니다.

참고 : 내 경험상, 이것은 proguard 템플릿 파일 ( 여기서 다른 답변 에 대한 의견 제시자가 제안한)에 의해 지배 되지 않습니다 .

업데이트 : 여러 제품 맛이있는 경우 훨씬 나은 솔루션입니다 : https : //.com/a/31116608/444761


1
버전 컨트롤 아래에 배치 할 수 있다고 말했듯이 이것은 내 솔루션보다 낫습니다.
Clive Jefferies

왜이 버전을 버전 관리하고 싶습니까? 빌드 의존적이므로 별도로 출시하는 모든 APK에 대해 필요합니다. 소스에서 별도로 apk를 업로드 / 체크인해야하기 때문에 실제로 소스 VCS에서 확인할 필요가 없습니다!?
Denny1989

@ Denny1989 무슨 뜻인지 모르겠습니다. APK를 빌드하고 버전 관리 외부에 저장합니다. 매핑 파일을 어딘가에 보관해야합니다. 내가 할 수 APK는 함께 보관,하지만 난 청소기 버전 제어 그것에 그것을 찾을 수 있습니다. 그러나 프로젝트 당 하나의 릴리스 APK 만 있으므로 YMMV입니다.
Mark

36

생성되지 않았다는 것을 알았으므로 규칙 파일에 추가했습니다.

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

1
내가 사용하고있는 템플릿 보호 파일이 printmapping보다 우선 함을 발견했습니다!
Boy

1
이것은 효과가 있었고 모든 proguard 출력 파일을 생성했습니다.
j2emanue

16

이 질문에 대답하기에는 꽤 늦었지만 누군가 내 대답이 필요한 경우를 대비하여.

비난 독화 할 매핑 파일의 위치 :

ProGuard는 앱 app / build / outputs / mapping / FLAVOR / release / mapping.txt에 파일을 저장합니다

일반적으로 디버그 모드에서는 일반적으로 난독 화가 비활성화되어 있으므로 매핑 파일이 필요하지 않습니다. 그렇지 않은 경우 build.gradle 파일에 디버그 변형 코드가 있는지 확인하십시오.

debug {
    minifyEnabled false
    debuggable true
}

몇 가지 문제점 :

ProGuard로 릴리스 빌드를 만들 때마다 mapping.txt 파일을 덮어 쓰므로 먼저 새 릴리스를 만들기 전에 해당 파일을 백업하십시오. 이전 버전의 앱에서 난독 화 된 스택 추적에 도움이됩니다.

그 외에도 코드를 난독 화하는 두 가지 방법이 있습니다.

1. mapping.txt 파일을 Google Play Console에 업로드합니다.

Google Play에 앱을 게시 할 때 각 버전의 APK에 대한 mapping.txt 파일을 업로드 할 수 있습니다. 그런 다음 Google Play는 사용자가보고 한 문제에서 수신 스택 추적을 난독 처리하므로 Google Play 콘솔에서 문제를 검토 할 수 있습니다.

2. 로컬 SDK 도구 retrace.sh/retrace.bat를 사용하십시오.

때로는 빌드 버전을 릴리스로 변경하여 릴리스하고 실행하여 앱의 릴리스 버전을 실행하여 프로덕션에서 발생하지 않도록 (플레이 스토어로 릴리스 할 때) 오류를 교차 확인하고 수정하려고합니다.

난독 처리 된 스택 추적을 읽을 수있는 스택 추적으로 변환하려면 retrace 스크립트 ( Windows의 경우 retrace.bat, Mac / Linux의 경우 retrace.sh )를 사용하십시오.

그것은에 위치한 <sdk-root>/tools/proguard/bin/디렉토리.

<sdk-root> 모든 안드로이드 라이브러리와 SDK가 설치된 곳입니다.

스크립트는 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


11

여기에 이미지 설명을 입력하십시오

여기 사진에 있습니다-매핑 폴더에 있습니다.


2

누군가가 파일의 위치를 ​​알려주더라도 멍청하고 길을 잃기 때문에 :

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.