警告:質問をよりわかりやすくするために、多くの「古いテキスト」を削除しました。必要に応じて履歴を確認してください。
facebook sdk 3.0proguard
を使用するアプリの縮小と難読化の両方に使用しています(sdk-version-3.0.2.bタグを使用しています)。JARファイルを使用していません。代わりに、ドキュメントで説明されているように、ワークスペース内にSDKをインポートしました。
実行の特定の時点で、アプリはPlacePickerFragmentをロードして、ユーザーが自分のいる場所を選択できるようにします。これをコーディングするために、私はScrumptiousチュートリアルに正確に従います。すべてを使用せずにデバッグapkを生成すると、期待どおりに機能します。proguard
しかし、を使用して署名付きapkを生成するとproguard
、PlacePickerFragmentが次のトレースで近くの場所をロードするとクラッシュします。
E/AndroidRuntime(27472): FATAL EXCEPTION: main
E/AndroidRuntime(27472): com.facebook.FacebookGraphObjectException: can't infer generic type of: interface com.facebook.model.GraphObjectList
E/AndroidRuntime(27472): at com.facebook.model.GraphObject$Factory.coerceValueToExpectedType(Unknown Source)
E/AndroidRuntime(27472): at com.facebook.model.GraphObject$Factory$GraphObjectProxy.proxyGraphObjectGettersAndSetters(Unknown Source)
E/AndroidRuntime(27472): at com.facebook.model.GraphObject$Factory$GraphObjectProxy.invoke(Unknown Source)
E/AndroidRuntime(27472): at com.facebook.widget.$Proxy2.getData(Native Method)
E/AndroidRuntime(27472): at com.facebook.widget.GraphObjectPagingLoader.addResults(Unknown Source)
E/AndroidRuntime(27472): at com.facebook.widget.GraphObjectPagingLoader.requestCompleted(Unknown Source)
E/AndroidRuntime(27472): at com.facebook.widget.GraphObjectPagingLoader.access$1(Unknown Source)
E/AndroidRuntime(27472): at com.facebook.widget.GraphObjectPagingLoader$2.onCompleted(Unknown Source)
E/AndroidRuntime(27472): at com.facebook.Request$4.run(Unknown Source)
E/AndroidRuntime(27472): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(27472): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(27472): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(27472): at android.app.ActivityThread.main(ActivityThread.java:3687)
E/AndroidRuntime(27472): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(27472): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(27472): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
E/AndroidRuntime(27472): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
E/AndroidRuntime(27472): at dalvik.system.NativeStart.main(Native Method)
このエラーを回避するために、すべてのFacebookクラスをそのままにしましたが、機能しませんでした。私の現在のproguard-project.txt
ファイル:
-keep class com.facebook.** {
*;
}
私の現在のprojet.properties
ファイル(抜粋):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
ご覧のとおり、私の構成はこのファイルproguard
の「特殊化」です。
ファイルに入れれば動作-dontobfuscate
します。proguard-project.txt
しかし、私が理解していないのは、keep class com.facebook.**
Facebookに関連するクラスが難読化されるのをすでに防ぐ必要があるということです。これは、問題がFacebookクラスに直接関係していないことを示唆しています。
スローするコードの抜粋com.facebook.FacebookGraphObjectException
は次のとおりです。
static <U> U coerceValueToExpectedType(Object value, Class<U> expectedType,
ParameterizedType expectedTypeAsParameterizedType) {
// [...]
} else if (Iterable.class.equals(expectedType) || Collection.class.equals(expectedType)
|| List.class.equals(expectedType) || GraphObjectList.class.equals(expectedType)) {
if (expectedTypeAsParameterizedType == null) {
throw new FacebookGraphObjectException("can't infer generic type of: " + expectedType.toString());
}
// [...]
}
明らかに、expectedTypeAsParameterizedType
リリースnull
ビルドにあります。ただし、どちらのビルド(デバッグとリリース)expectedType
でもcom.facebook.model.GraphObjectList
インターフェイスです。残念ながら、私はJavaリフレクションの概念についてほとんど何も理解していません。
この問題を解決するにはどうすればよいですか?