我测试了我的应用程序,在模拟器和我的设备上,它工作没有错误。我导出启用了proguard选项的eclipse项目。当我打开一个自定义对话框http://code.google.com/p/dateslider/.
我尝试了所有类的-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>
编辑在
触发未知异常Class<?> klazz = Class.forName(className);
Constructor<?> ctor = klazz.getConstructor(String.class);
className ="nl.zonneveld.pldkal_free.YearLabeler"。
yearlabel的构造函数:
public YearLabeler(String formatString)
我尝试了以下保护选项,没有成功。
-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);
}
错误是什么——ClassNotFoundError
?意思是,你认为Proguard优化了那个类?您可以通过将-dontshrink
设置为start来轻松地进行测试。如果这不能解决问题,那么Proguard不是问题所在。
可以在命令行中使用adb logcat
获取所有日志输出。与eclipse集成的工具可能有类似的工具,但我不知道它是什么。您也可以使用aLogcat
应用程序在Android上查看日志
经过大量的挖掘,这是解决方案。谢谢Sean的建议。
-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);
}