Подтвердить что ты не робот

Android Cling/Upnp proguard

Я создал приложение, используя Cling и отлично работает, но когда я создаю сборку релизов, я получаю следующее сообщение и ничего не играет на рендерере:

   11-22 16:24:53.341  20172-20172/? I/RendererCommand﹕ TrackMetadata : TrackMetadata [id=1, title=IMG-20151120-WA0007, artist=, genre=, artURI=res=http://192.168.1.4:8089/1.jpg, itemClass=object.item.imageItem]
11-22 16:24:53.345  20172-20172/? V/RendererCommand﹕ Resume
11-22 16:24:53.351  20172-20301/? W/RendererCommand﹕ Fail to stop ! Error: Current state of service prevents invoking that action. Error writing request message. Can't transform message payload: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType. (HTTP response was: 500 Internal Server Error)
11-22 16:24:53.351  20172-20301/? I/RendererCommand﹕ Set uri to http://192.168.1.4:8089/1.jpg
11-22 16:24:53.353  20172-20386/? D/RendererCommand﹕ Update state !
11-22 16:24:53.354  20172-20264/? W/RendererCommand﹕ Fail to set URI ! Error: Current state of service prevents invoking that action. Error writing request message. Can't transform message payload: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType. (HTTP response was: 500 Internal Server Error)
11-22 16:24:53.354  20172-20262/? W/RendererCommand﹕ Fail to get position info ! Error: Current state of service prevents invoking that action. Error writing request message. Can't transform message payload: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType. (HTTP response was: 500 Internal Server Error)
11-22 16:24:54.354  20172-20386/? D/RendererCommand﹕ Update state !

Ниже приведена моя proguard enteries:

-dontoptimize
-dontshrink
-dontskipnonpubliclibraryclasses
-dontpreverify
-allowaccessmodification
-verbose

-dontwarn org.fourthline.cling.**
-dontwarn org.seamless.**
-dontwarn org.eclipse.jetty.**
-dontwarn android.support.v4.app.**
-dontwarn android.support.design.widget.**

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep class javax.** { *; }
-keep class org.** { *; }
-keep class org.fourthline.cling.** { *;}
-keep class org.seamless.** { *;}
-keep class org.eclipse.jetty.** { *;}
-keep class org.slf4j.** { *;}
-keep class javax.servlet.** { *;}

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}


-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }

-keepattributes *Annotation*
4b9b3361

Ответ 1

Хорошо после того, как я прочитал руководство по прогортам и получил многочисленные хиты и испытания, я, наконец, сделал это, изменив последнюю строку выше файла prguard на

-keepattributes Annotation, InnerClasses, Signature

и все отлично работает

от proguard

Задает общую подпись класса, поля или метода. Компиляторам может понадобиться эта информация для правильной компиляции классов, которые используют общие типы из скомпилированных библиотек. Код может получить доступ к этой сигнатуре путем отражения.

и проблема имеет отражение

Ответ 2

proguard развращает, т.е. затрагивает классы/интерфейсы в Cling lib, и вам нужно предотвратить это...

вы можете запустить здесь, если у вас возникла проблема с тем, что Proguard касается некоторых сетей, связанных с стеке Jetty/Http, я думаю, из содержания вашей ошибки. Дикая догадка заключается в том, что его, как будто объект http или body can not обрабатывается как реализация соответствующих интерфейсов... Вы хотите настроить proguard, чтобы избежать всех интерфейсов в этой библиотеке, и у вас нет каких-либо директив "держать интерфейс" в вашей proguard..

Например, вы сообщаете proguard, чтобы не касаться каких-либо интерфейсов в 'org.eclipse.jetty'. Вы этого не делаете и можете захотеть.

см. здесь

сканирование руководств proguard для -keepinterface для использования с пакетами приставок, реализующими соединения сервера /http в вашей библиотеке.

  • узнать больше о пакетах/интерфейсах "cling" во внутренних реализациях клиент-сервер и внутренних сетевых стеков в вашей библиотеке (похоже, что он реализует причал для CS-соединений на каком-то протоколе, таком как http)

  • создайте список пакетов в файле jar/archive для сравнения с конфигурацией proguard. обратите особое внимание на интерфейсы, используемые при реализации сервера причала "jar -tf my.jar | sort | uniq" или некоторые такие

  • посмотрите, что было запущено proguard в 'mapping.txt' и в 'seeds.txt' объясните здесь. пересекайте эти имена пакетов из этих соответствующих списков с пакетами и списками, собранными выше, что вы НЕ хотите, чтобы proguard возился. "Семена" должны содержать ваши классы/интерфейсы причала. "отображение" НЕ должно!

Ответ 3

Возможно, вы могли бы добавить -keepclassmembers в дополнение к -keep class для пакета org.fourthline.cling как это:

-keep class org.fourthline.cling.** { *;}
-keepclassmembers class org.fourthline.cling.** { *;}