2015-11-22 17 views
11

Stworzyłem aplikację używając Cling i pracuje bez zarzutu, ale gdy tworzę kompilacji uwolnienia dostaję następujący komunikat i nic gra na renderujący:Android Cling/UPnP PROGUARD

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 ! 

Poniżej jest moje 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* 
+1

masz "było odpowiedzi HTTP 500 Internal Server Error" należy sprawdzić błąd na serwerze? – LaurentY

+1

Tak, to dość dziwne, że ten sam serwer działa dobrze z chromecastem, ale nie z Upnpem po uruchomieniu proguard Iam po prostu utknął – ingsaurabh

+0

OK, ale jaki jest błąd na serwerze? Jestem pewien, że błąd 500 jest rejestrowany na serwerze. Proszę to sprawdzić na serwerze – LaurentY

Odpowiedz

8

Ok po przeczytaniu instrukcji PROGUARD, posiadające liczne trafienia i prób w końcu zrobili go modyfikując ostatni wiersz powyższego pliku prguard do

-keepattributes adnotacji, InnerClasses, podpis

i wszystko działa poprawnie

z PROGUARD

Określa rodzajowy podpis klasy, pola lub metody.Kompilatory mogą potrzebować tych informacji, aby poprawnie skompilować klasy, które używają typów ogólnych ze skompilowanych bibliotek. Kod może uzyskać dostęp do tego podpisu za pomocą refleksji.

i problem jest refleksji

2

PROGUARD jest zgorszenie tj dotykania klas/interfejsów w lib Cling i trzeba temu zapobiec ...

można zacząć here zakładając masz problem z tym, że Proguard dotyka jakiejś sieci związanej ze stosem Jetty/Http, chyba z treści twojego błędu. Dziwne przypuszczenie jest takie, że nie można traktować encji lub ciała http jako implementujących odpowiednie interfejsy ... Chcesz skonfigurować program, aby uniknąć wszystkich interfejsów w tej bibliotece i nie masz żadnych dyrektyw "keep interface" w swoim proguardzie.

Czy na przykład mówisz programowi proguard, aby nie dotykał żadnego z interfejsów w obszarze "org.eclipse.jetty". Nie robisz tego i możesz chcieć.

zobaczyć here

instrukcje PROGUARD skanowania dla -keepinterface do korzystania z pakietów pomost realizacji połączeń HTTP Server/w lib.

  1. wiedzieć więcej o pakietach „Samoprzyczepne”/interfejsów wokół wewnętrznego klient-serwer i implementacji stosu sieci wewnętrznych w bibliotece (wygląda to implementuje pomost dla połączeń CS na jakimś protokołem jak HTTP)

  2. zbuduj listę pakietów w słoiku/archiwum biblioteki, aby porównać do konfiguracji proguard. zwróć szczególną uwagę na interfejsy używane przez serwerową implementację serwera "jar -tf my.jar | sort | uniq" lub niektóre takie

  3. zobacz, co zostało zaciemnione przez program proguard w "mapping.txt" oraz w pliku "seeds.txt" "explain here. przecinają te nazwy paczek z tych odpowiednich list z pakietami & złożonymi powyżej, że NIE chciałeś, aby program wprowadzał w błąd. "nasiona" powinny zawierać twoje pomostowe klasy/interfejsy. "mapowanie" NIE powinno!

+1

Próbowałem każdej możliwej kombinacji, ale wciąż ten sam komunikat o błędzie, myśląc o oderwaniu się od przylgnięcia – ingsaurabh

0

Może spróbujesz dodać -keepclassmembers oprócz -keep class pakietu org.fourthline.cling jak to:

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

Próbowałem nie działać – ingsaurabh

Powiązane problemy