2016-06-25 4 views
5

私のビルドして、私のマシン上で時折私のマシン上で、logcatでクラッシュを公開する私のアプリはnullポインタの例外のstacktraceを開きます..しかし、私は正確な行番号を見つけることができませんか?それが言うので、あなたがどこ史上私は行番号を見ない私のアプリケーションパッケージがある見ての通り(不明なソース) は、例えば、いくつかの行は、この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>] 

を使用して適切にトレースを読み取るためにProGuardのコマンドを使用していないが、まだ行番号?私は行番号が欠落する原因となる正確に何が間違っているのだろうか?私のコードで行番号を表示し、それを公開する準備ができているトレースを取得するにはどうすればよいですか?

+1

あなたはデバッグモードでアプリケーションを実行しようとしましたが、エラーを繰り返すのは何ですか?コードが難読化されて最小化されているため、Unknownソースが取得されます –

+0

デバッグでは再現できませんが、逆を行い、正確な行を表示するために使用したretraceコマンドはありますか? – Ahmed

+0

これは、コードがまだ縮小されているので、ライン番号を取得するかどうかはわかりません。開発者コンソールからこのトレースを取得していますか? 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のを使用しながら、行番号を取得するには、proguard-rules.pro

-keepattributes *Annotation*,SourceFile,LineNumberTable 

内の次の行を記述する必要があり、あなたが行われています。

1

また、Google Playデベロッパーコンソールにmapping.txtファイルをアップロードすることもできます。コンソールで、難消化したいアプリをクリックしてください。

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

、アプリの現在のバージョンに合ったmapping.txtファイルをアップロードします。その後、「アンドロイドバイタル」>「のANR &クラッシュ」に進みます。 mapping.txtの

場所:

のAndroidメーカー:\

[YOUR-PROJECT-DIR] \アプリ\ \出力\マッピング\リリース\のmapping.txtを構築

のEclipse:

\ [ECLIPSE-WORKSPACE] \ [あなたのプロジェクトディレクトリ] \ proguard \ mapping。txt

注意:エラーは、mapping.txtのアップロード後にのみ解読されます。 Google Playデベロッパーコンソールに既に報告されているクラッシュの解読はありません。

関連する問題