在proguard压缩和应用程序部署之后获得适当的堆栈跟踪

时间:2016-05-30 12:47:22

标签: android google-analytics stack-trace android-proguard

我已经部署了我的第一个应用程序,我正在使用谷歌分析来捕捉异常。我正在录制堆栈跟踪。

[in.jiyofit.basic_app.WorkoutActivity.a(Unknown Source), 
in.jiyofit.basic_app.WorkoutActivity.onWindowFocusChanged(Unknown Source),

如何解释“未知来源”中的内容?我相信这是因为进步而发生的。有没有办法在崩溃/异常期间获取行号。以下是查找异常的代码:

public void trackException(Exception e) {
    if (e != null) {
        Tracker t = getGoogleAnalyticsTracker();

        t.send(new HitBuilders.ExceptionBuilder()
                .setDescription(
                        new StandardExceptionParser(this, null)
                                .getDescription(Thread.currentThread().getName(), e))
                .setFatal(false)
                .build()
        );

        SharedPreferences loginPrefs = getSharedPreferences("LoginInfo", MODE_PRIVATE);
        userID = loginPrefs.getString("userID", "");
        DisplayMetrics metrics = new DisplayMetrics();
        Long currentTime = System.currentTimeMillis();
        if(userID.length() > 0){
            trackEvent("Exception", "userID: " + userID + " Date: " + currentTime + " " + e.getClass().getSimpleName(), Arrays.toString(e.getStackTrace()));
            trackEvent("Exception", "userID: " + userID + " Date: " + currentTime + " " + e.getClass().getSimpleName(), "SDK: " + Build.VERSION.SDK_INT + " Manu: " + Build.MANUFACTURER + " Model: " + Build.MODEL);
        } else {
            trackEvent("Exception", "Date: " + currentTime + " " + e.getClass().getSimpleName(), Arrays.toString(e.getStackTrace()));
            trackEvent("Exception", "Date: " + currentTime + " " + e.getClass().getSimpleName(), "SDK: " + Build.VERSION.SDK_INT + " Manu: " + Build.MANUFACTURER + " Model: " + Build.MODEL);
        }
    }
} 

编辑: 我试图按照下面的Gopal的回答。 我以这种方式获得了堆栈跟踪:Arrays.toString(e.getStackTrace()) 我记录了以下stacktrace:

[in.jiyofit.basic_app.WorkoutActivity.a(Unknown Source), 
in.jiyofit.basic_app.WorkoutActivity.onWindowFocusChanged(Unknown Source), 
 com.android.internal.policy.impl.PhoneWindow$DecorView.onWindowFocusChanged(PhoneWindow.java:2777), 
android.view.View.dispatchWindowFocusChanged(View.java:7995), 
android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:968),
 android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3171), 
android.os.Handler.dispatchMessage(Handler.java:102), 
android.os.Looper.loop(Looper.java:136), 
android.app.ActivityThread.main(ActivityThread.java:5433), 
java.lang.reflect.Method.invokeNative(Native Method), 
java.lang.reflect.Method.invoke(Method.java:515), 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268), 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084), 
dalvik.system.NativeStart.main(Native Method)]  

但是,为了获得经过反混淆的代码,没有正确处理。经过反混淆的代码将混淆的代码作为输出。所以, 1.如何存储堆栈跟踪以供proguardgui解释它? Arrays.toString(e.getStackTrace())似乎无法正常运作 2.我应该如何编辑给定的堆栈跟踪以便proguard解释和反混淆它?

由于

1 个答案:

答案 0 :(得分:0)

转到sdk目录\\Androidsdk\tools\proguard\bin并打开proguardgui.bat 有一个回溯选项,使用此选项,您可以将您的映射文件放在proguard和混淆的堆栈跟踪中,并使用正确的行号获取原始堆栈跟踪。