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エントリーです:

-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

プロガードのマニュアルを読み、多くのヒットと試行を行った後、上記のprguardファイルの最後の行を次のように変更して、最終的にそれを行いました

-keepattributes Annotation、InnerClasses、Signature

そして、すべてが正常に動作します

プロガードから

クラス、フィールド、またはメソッドのジェネリック シグネチャを指定します。コンパイラは、コンパイル済みライブラリのジェネリック型を使用するクラスを正しくコンパイルするために、この情報を必要とする場合があります。コードは、リフレクションによってこの署名にアクセスできます。

そして問題は反省です

于 2015-12-04T06:01:01.437 に答える
2

proguard が破損している、つまり、Cling lib のクラス/インターフェイスに触れているため、それを防ぐ必要があります...

エラーの内容から推測すると、Proguard が Jetty/Http スタックに関連するネットワークに触れることに問題があると仮定して、ここから始めることができます。httpエンティティまたはボディが適切なインターフェースを実装するように処理できないかのように推測されます...そのライブラリ内のすべてのインターフェースを回避するようにproguardを構成したいのですが、proguardに「keep interface」ディレクティブがありません.. .

たとえば、「org.eclipse.jetty」のどのインターフェースにも触れないようにproguardに指示していますか。あなたはそれをしていませんし、したいかもしれません。

ここを参照

-keepinterface の proguard マニュアルをスキャンして、lib に server/http 接続を実装する jetty パッケージで使用します。

  1. ライブラリ内の内部クライアントサーバーおよび内部ネットワークスタック実装に関する「執着」パッケージ/インターフェースについて詳しく知る( http などのプロトコルで CS 接続用の jetty を実装しているように見える)

  2. lib の jar/archive にパッケージ リストを作成して、proguard 構成と比較します。jetty のサーバー実装 "jar -tf my.jar | sort | uniq" などで使用されているインターフェースに特に注意してください。

  3. 「mapping.txt」と「seeds.txt」でプロガードによって難読化されたものを見て、ここで説明してください。それぞれのリストのパッケージ名と、proguard に干渉させたくない上で組み立てられたパッケージとリストを交差させます。「シード」には、桟橋のクラス/インターフェースが含まれている必要があります。「マッピング」はすべきではありません!

于 2015-12-03T08:14:54.937 に答える
0

たぶん、次のようにfor パッケージ-keepclassmembersに加えて追加しようとすることができます:-keep classorg.fourthline.cling

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