android使用proguard,堆栈跟踪?

时间:2011-09-20 14:22:59

标签: debugging trace proguard

我测试了我的应用,在模拟器和我的设备上,它正常运行。 我导出了我的eclipse项目,启用了proguard选项。 当我打开自定义对话框http://code.google.com/p/dateslider/时,生成的apk崩溃了。

我为我使用的所有类尝试了-keep选项,但没有结果。

从我所读到的,是我需要崩溃的痕迹。来调试。

它在哪里?,只显示一个对话框,告诉我应用程序已崩溃。

修改

感谢Sean的建议,我将其缩小为调用方法“SetContentView”。它试图从布局加载数据。

<?xml version="1.0" encoding="utf-8"?>
<nl.zonneveld.pldkal_free.SliderContainer
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/nl.zonneveld.pldkal_free"
android:id="@+id/dateSliderContainer"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<nl.zonneveld.pldkal_free.ScrollLayout
    style="@style/Scroller"
    app:labelerClass="nl.zonneveld.pldkal_free.YearLabeler"
    app:labelerFormat="%tY"
    app:childWidth="150dp"/>
<nl.zonneveld.pldkal_free.ScrollLayout
    style="@style/Scroller"
    app:labelerClass="nl.zonneveld.pldkal_free.MonthLabeler"
    app:labelerFormat="%tB"
    app:childWidth="200dp"/>
<include layout="@layout/dialogbuttons"/>
</nl.zonneveld.pldkal_free.SliderContainer>

EDIT

触发了未知异常
Class<?> klazz = Class.forName(className);
Constructor<?> ctor = klazz.getConstructor(String.class);

的className = “nl.zonneveld.pldkal_free.YearLabeler”。

YearLabeler的构造函数:

public YearLabeler(String formatString)

我尝试了以下的proguard选项,没有成功。

-keep public class * extends nl.zonneveld.pldkal_free.YearLabeler{
 public <init>(java.lang.String);
}
-keep public class * extends nl.zonneveld.pldkal_free.MonthLabeler{
    public <init>(java.lang.String);
}
-keep public class * extends nl.zonneveld.pldkal_free.Labeler{
    public <init>(int, int);
}

2 个答案:

答案 0 :(得分:0)

错误是什么 - ClassNotFoundError?意思是,你认为Proguard优化了那个级别?您可以通过设置-dontshrink来轻松测试,然后开始。如果这不能解决问题,Proguard不是问题。

您可以在命令行上使用adb logcat获取所有日志输出。对于Eclipse集成的工具,可能有一个等价物,但我不知道它是什么。您还可以使用Android上的aLogcat应用查看日志。

答案 1 :(得分:0)

经过大量挖掘,这就是解决方案。谢谢肖恩的建议。

-keep public class * extends nl.zonneveld.pldkal_free.YearLabeler
-keepclassmembers class nl.zonneveld.pldkal_free.YearLabeler{
 public <init>(java.lang.String);
}
-keep public class * extends nl.zonneveld.pldkal_free.MonthLabeler
-keepclassmembers class nl.zonneveld.pldkal_free.MonthLabeler{
    public <init>(java.lang.String);
}
-keep public class * extends nl.zonneveld.pldkal_free.Labeler
-keepclassmembers class nl.zonneveld.pldkal_free.Labeler{
    public <init>(int, int);
}