Android с помощью Proguard, трассировки стека? - PullRequest
0 голосов
/ 20 сентября 2011

Я протестировал свое приложение, и в эмуляторе, и на моем устройстве оно работает без ошибок. Я экспортирую свой eclipse-проект с включенной опцией proguard. Получающийся apk падает, когда я открываю пользовательское диалоговое окно http://code.google.com/p/dateslider/.

Я попробовал опции -keep для всех классов, которые я использовал, но безрезультатно.

Исходя из того, что я прочитал, мне нужна трассировка сбоя для отладки.

Где это ?, отображается только диалоговое окно, сообщающее мне о сбое приложения.

Jos

EDIT

Благодаря предложениям Шона я сужаю его до вызова метода 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);

имя класса = "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 голосов
/ 21 сентября 2011

После долгих копаний это было решением. Спасибо Шон за предложения.

-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);
}
0 голосов
/ 20 сентября 2011

В чем ошибка - ClassNotFoundError? Значит, ты думаешь, что Proguard оптимизировал этот класс? Вы можете легко это проверить, установив -dontshrink, чтобы начать. Если это не помогает, то проблема не в Proguard.

Вы можете получить весь вывод журнала с помощью adb logcat в командной строке. Вероятно, есть эквивалент для интегрированных в Eclipse инструментов, но я не знаю, что это такое. Вы также можете использовать приложение aLogcat на Android для просмотра журналов.

...