问题 Android Cling / Upnp proguard


我用app创建了app 依偎 并且工作正常但是当我创建发布版本时,我得到以下消息并且渲染器上没有任何内容:

   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*

11210
2017-11-22 11:17


起源

你有一个“HTTP响应是:500内部服务器错误”你检查服务器上的错误? - LaurentY
是的,非常奇怪的是,相同的服务器与chromecast一起工作正常,但在运行proguard Iam之后没有与Upnp一起工作 - ingsaurabh
好的,但服务器上的错误是什么?我确定服务器上记录了错误500。请在服务器上查看 - LaurentY
如果您阅读日志,它会清楚地说明问题是由服务引起的,因此适当的有效负载无法进行分类转换,最终在服务器中返回,因为服务器没有正确的负载 - ingsaurabh
stackoverflow.com/questions/4447145/...   如果它是一个反射/ proguard问题,请尝试 - Robert Rowntree


答案:


在阅读了proguard手册,并且有大量的命中和试验后,我终于通过修改上面的prguard文件的最后一行来做到了

-keepattributes 注解,InnerClasses,签名

一切都很好

来自proguard

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

问题是反思


8
2017-12-04 06:01





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

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

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

看到 这里

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

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

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

  3. 看看'mapping.txt'和'seeds.txt'中的proguard是否混淆了什么 在这里解释。将这些包名称从那些相应的列表与上面汇编的包和列表相交,你不希望proguard弄乱。 '种子'应该包含您的码头类/接口。 '映射'不应该!


2
2017-12-03 08:14



尝试了所有可能的组合,但仍然是相同的错误信息,想着离开紧贴 - ingsaurabh


也许你可以尝试添加 -keepclassmembers 此外 -keep class 包裹 org.fourthline.cling 这样:

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

0
2017-12-03 10:01



试着不行 - ingsaurabh