私は Android 開発者で、クライアント向けのアプリを開発しています。ただし、クライアント デバイスでは、通常、いくつかのアプリ クラッシュの問題が発生しました。しかし、それは私のデバイスでは起こりませんでした。しかし、クライアントに到達できないので、質問があります: ~~~~ 私の Android アプリに実装できるプラグインやツールはありますか? クライアントのデバイスでアプリがクラッシュした場合、クラッシュ ログは私の電子メールまたはどこかで確認できるので、デバッグできます。教えてください、ありがとう
3 に答える
1
https://play.google.com/apps/publish/にアクセスしてアプリを公開します。ユーザーがアプリをインストールしてクラッシュすると、Google に通知されます。このコントロール パネルにログインすると、[レポート] タブ、[クラッシュと ANRS] でそのようなレポートを見つけることができます。
于 2015-07-15T04:15:39.627 に答える
0
Crashlytics を見てみましょう: http://try.crashlytics.com/sdk-android/
于 2015-07-15T04:31:46.637 に答える
0
アプリケーションクラスを拡張し、例外ハンドルを安定したコードで再定義する必要があると思います(Androidのバージョンに依存しません)。
コード例:
あなたのApplication.java
public class YourApplication extends Application {
@Override
public void onCreate() {
Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler.inContext(getApplicationContext()));
super.onCreate();
}}
ExceptionHandler.java
final public class ExceptionHandler implements Thread.UncaughtExceptionHandler{
private final DateFormat formatter = new SimpleDateFormat("dd.MM.yy HH:mm");
private final DateFormat fileFormatter = new SimpleDateFormat("dd-MM-yy");
private String versionName = "0";
private int versionCode = 0;
private final String stacktraceDir;
private final Thread.UncaughtExceptionHandler previousHandler;
private ExceptionHandler(Context context, boolean chained) {
PackageManager mPackManager = context.getPackageManager();
PackageInfo mPackInfo;
try {
mPackInfo = mPackManager.getPackageInfo(context.getPackageName(), 0);
versionName = mPackInfo.versionName;
versionCode = mPackInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
// ignore
}
if(chained)
previousHandler = Thread.getDefaultUncaughtExceptionHandler();
else
previousHandler = null;
stacktraceDir = String.format("/Android/data/%s/files/", context.getPackageName());
}
static ExceptionHandler inContext(Context context) {
return new ExceptionHandler(context, true);
}
static ExceptionHandler reportOnlyHandler(Context context) {
return new ExceptionHandler(context, false);
}
@Override
public void uncaughtException(Thread thread, Throwable exception) {
final String state = Environment.getExternalStorageState();
final Date dumpDate = new Date(System.currentTimeMillis());
if (Environment.MEDIA_MOUNTED.equals(state)) {
StringBuilder reportBuilder = new StringBuilder();
reportBuilder
.append("\n\n\n")
.append(formatter.format(dumpDate)).append("\n")
.append(String.format("Version: %s (%d)\n", versionName, versionCode))
.append(thread.toString()).append("\n");
processThrowable(exception, reportBuilder);
File sd = Environment.getExternalStorageDirectory();
File stacktrace = new File(
sd.getPath() + stacktraceDir,
String.format(
"stacktrace-%s.txt",
fileFormatter.format(dumpDate)));
File dumpdir = stacktrace.getParentFile();
boolean dirReady = dumpdir.isDirectory() || dumpdir.mkdirs();
if (dirReady) {
FileWriter writer = null;
try {
writer = new FileWriter(stacktrace, true);
writer.write(reportBuilder.toString());
} catch (IOException e) {
// ignore
} finally {
try {
if (writer != null)
writer.close();
} catch (IOException e) {
// ignore
}
}
}
}
if(previousHandler != null)
previousHandler.uncaughtException(thread, exception);
}
private void processThrowable(Throwable exception, StringBuilder builder) {
if(exception == null)
return;
StackTraceElement[] stackTraceElements = exception.getStackTrace();
builder
.append("Exception: ").append(exception.getClass().getName()).append("\n")
.append("Message: ").append(exception.getMessage()).append("\nStacktrace:\n");
for(StackTraceElement element : stackTraceElements) {
builder.append("\t").append(element.toString()).append("\n");
}
processThrowable(exception.getCause(), builder);
}}
アプリがクラッシュした場合は、/sdcard/android/data/you.package.name/files/ all log files で StackTrace を使用してログを見つけることができます。また、アプリを起動するたびに、このフォルダーで新しいログ ファイルを確認できます。新しいファイルが見つかった場合は、これをメールに送信できます。
于 2015-07-15T04:37:48.160 に答える