我测试了我的应用,在模拟器和我的设备上,它正常运行。 我导出了我的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);
}
答案 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);
}