Android Cling / Upnp proguard

时间:2015-11-22 11:17:04

标签: android upnp android-proguard android-cling

我使用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 !

以下是我的计划:

-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*

3 个答案:

答案 0 :(得分:8)

好了阅读了proguard手册,并进行了大量的点击和试验后,我终于通过将上面的prguard文件的最后一行修改为

  

-keepattributes Annotation ,InnerClasses,Signature

并且一切正常

来自proguard

  

指定类,字段或方法的通用签名。编译器可能需要此信息来正确编译使用编译库中的泛型类型的类。代码可以通过反射访问此签名。

并且问题是反思

答案 1 :(得分:2)

proguard正在破坏,即触及Cling lib中的类/接口,你需要阻止......

你可以开始here假设你有一个问题,Proguard触及了一些与Jetty / Http堆栈相关的网络,我想从你的错误内容中猜测。狂野的猜测是它好像http实体或主体不能被处理为实现正确的接口...你想配置proguard以避免该库中的所有接口,并且你的proguard中没有任何“保持接口”指令。 。

例如,您是否告诉proguard不要触及'org.eclipse.jetty'中的任何接口。你没有这样做,你可能想要。

请参阅here

扫描用于-keepinterface的proguard手册,以与在lib中实现服务器/ http连接的jetty包一起使用。

  1. 了解更多关于库中内部客户端 - 服务器和内部网络堆栈实现的'cling'包/接口(看起来它在某些协议上为CS连接实现了jetty)

    < / LI>
  2. 在lib的jar / archive上构建一个包列表,以与你的proguard配置进行比较。特别注意jetty的服务器实现使用的接口“jar -tf my.jar | sort | uniq”或其他一些

  3. 看看'mapping.txt'和'seeds.txt'explain here中的proguard是否被混淆了。将这些包名称从包含&amp;的相应列表中相交上面汇集的列表,你不希望proguard搞砸。 '种子'应该包含您的码头类/接口。 '映射'不应该!

答案 2 :(得分:0)

也许您可以尝试为-keepclassmembers添加-keep class以用于包org.fourthline.cling,因为:

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