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 !

以下是我的项目简介:

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

好的,在阅读了proguard手册,并进行了多次尝试之后,我终于把上面的proguard文件的最后一行修改为

-keeptattributesAnnotation,InnerClasses,Signature

每件事都很好

来自proguard

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

并且问题是反射

proguard正在损坏,即触摸Cling库中的类/接口,您需要防止这种情况。。。

您可以从这里开始,假设Proguard在Jetty/Http堆栈中接触到一些与网络相关的内容时遇到问题,我从您的错误内容中猜测。粗略的猜测是,http实体或主体似乎无法被处理为实现正确的接口。。。你想配置proguard以避免该库中的所有接口,并且你的proguard中没有任何"保留接口"指令。。。

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

参见此处

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

  1. 了解更多关于库中内部客户端服务器和内部网络堆栈实现的"紧贴"包/接口的信息(看起来它在一些协议(如http)上为C-S连接实现了jetty)

  2. 在lib的jar/archive上构建一个包列表,以与您的proguard配置进行比较。要特别注意jetty的服务器实现"jar-tf my.jar | sort | uniq"或类似所使用的接口

  3. 看看proguard在"mapping.txt"one_answers"seeds.txt"中混淆了什么。将来自那些相应列表的那些包名称与包&上面列出了你不想让proguard搞砸的清单seeds应该包含您的jetty类/接口映射"不应该!

也许您可以尝试在包org.fourthline.cling-keep class之外添加-keepclassmembers,如下所示:

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

相关内容

  • 没有找到相关文章

最新更新