12

我已经使用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*
4

3 回答 3

8

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

-keepattributes注释,内部类,签名

一切正常

来自proguard

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

问题是反思

于 2015-12-04T06:01:01.437 回答
2

proguard 正在破坏,即接触 Cling lib 中的类/接口,您需要防止这种情况发生......

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

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

这里

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

  1. 了解更多关于库中内部客户端服务器和内部网络堆栈实现的“紧贴”包/接口(看起来它在某些协议(如 http)上实现了 CS 连接的码头)

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

  3. 查看 proguard 在“mapping.txt”和“seeds.txt”中混淆的内容,请在此处解释。将那些各自列表中的那些包名称与上面组装的包和列表相交,你不想让 proguard 搞砸。“种子”应包含您的码头类/接口。“映射”不应该!

于 2015-12-03T08:14:54.937 回答
0

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

-keep class org.fourthline.cling.** { *;}
-keepclassmembers class org.fourthline.cling.** { *;}
于 2015-12-03T10:01:28.087 回答