2016-06-25 4 views
5

내 컴퓨터에서 가끔씩 내 컴퓨터에서 충돌 게시를 빌드하고 서명 한 내 앱, logcat에서 널 포인터 예외에 대한 스택 추적을 엽니 다.하지만 정확한 행 번호를 찾을 수 없습니까? 그 말 때문에 어디 이제까지 내가 더 줄 번호를 볼 수 없습니다 내 응용 프로그램 패키지가 보시다시피 (알 수없는 소스) 예를 들어 몇 줄이Android 앱 크래시 : 행 번호 대신 알 수없는 소스가있는 이유

Caused by: java.lang.NullPointerException 
    at me.com.myapplication.a.i.d(Unknown Source) 
    at me.com.myapplication.MainActivity.onResume(Unknown Source) 
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1210) 

처럼 대신 알 수없는 소스는 말한다.

다음은이 프로젝트의 내 그라디언트 구성입니다.

apply plugin: 'com.android.application' 
android { 
compileSdkVersion 23 
buildToolsVersion "23.0.2" 

defaultConfig { 
    applicationId "me.com.myappliaction" 
    minSdkVersion 8 
    targetSdkVersion 21 
    versionCode 6 
    versionName "2.0" 
} 

signingConfigs { 
    signed { 
     storeFile file('../keystore/my.keystore') 
     storePassword 'xxxxxx' 
     keyAlias 'xxxxx' 
     keyPassword 'xxxxxx' 
    } 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 

    signed { 
     debuggable false 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     signingConfig signingConfigs.signed 
    } 

} 
} 
dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.1.1' 
compile project(':mycomponent') 
} 

응용 프로그램이 서명 된 빌드 변형을 사용하고있었습니다. 나는

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>] 
이 클래스 이름이 더 표시 한 후

하지만 여전히 줄 번호 구문

다음 사용하여 제대로 추적을 읽는 난독 명령을 사용하여? 라인 번호가 누락되는 원인이 정확히 여기에 무엇이 있는지 궁금합니다. ?? 내 코드에서 줄 번호를 표시하고 게시 준비를 할 수있는 추적을 얻으려면 어떻게해야합니까?

+1

디버그 모드에서 앱을 실행 해보고 오류를 반복 해 보았습니까? 코드가 난독 화되어 최소화되었으므로 알 수없는 소스를 얻습니다. –

+0

디버그에서는 아직 재현 할 수 없지만 반대의 작업을 수행하고 정확한 줄을 표시하지 않는 retrace 명령이 있습니까? – Ahmed

+0

그건 당신이 deobfuscate하는 방법입니다, 그렇습니다. 그러나 코드가 여전히 축소되어 있으므로 줄 번호를 선택하는지 확신 할 수 없습니다. 개발자 콘솔에서이 추적을 받고 있습니까? https://support.google.com/googleplay/android-developer/answer/6295281 –

답변

5

은 ProGuard에서 빌드 후 디버그 정보를 유지하기 위해, 당신은 (당신의 proguard-rules.pro 파일) 다음과 같은 구성을 추가해야

-keepattributes SourceFile,LineNumberTable 
# rename the source files to something meaningless, but it must be retained 
-renamesourcefileattribute '' 
+1

빈 문자열 대신 파일 이름을 유지하기 위해'SourceFile'을 사용할 수 있습니다 : '-renamesourcefileattribute SourceFile' – verybadalloc

0

이 오류는 당신이 에 작게하다을 사용할 때 발생합니다 build.gradle. 난독 화를 사용하는 동안

minifyEnabled true 

이 줄 번호를 얻으려면, 당신은 proguard-rules.pro

-keepattributes *Annotation*,SourceFile,LineNumberTable 

내부에 다음 행을 작성해야 작업이 완료된다.

1

mapping.txt 파일을 Google Play 개발자 콘솔에 업로드 할 수도 있습니다. 콘솔에서 난독성을 제거하려는 앱을 클릭하십시오.

https://play.google.com/apps/publish/?dev_acc=[YOUR-DEV_ID]#DeobfuscationMappingFilesPlace:p=[your.app.package]

을하고 응용 프로그램의 현재 버전에 맞는 mapping.txt 파일을 업로드 : 그런 다음 "안드로이드 바이탈"> "ANR 수 & 충돌을"로 이동합니다. mapping.txt의

위치 :

안드로이드 스튜디오 : \

[YOUR-PROJECT-DIR] \ 응용 프로그램 \ \ 출력 \ 매핑 \ 릴리스 \의 mapping.txt를 구축

이클립스 :

\ [ECLIPSE-WORKSPACE] \ [자신의 프로젝트 디렉토리] \ proguard \ mapping.txt

주의 : 오류는 mapping.txt를 업로드 한 후에 만 ​​난독 처리됩니다. 이미 Google Play 개발자 콘솔에서 이미보고 된 충돌의 취소가 발생하지 않습니다.

관련 문제