Błąd podczas używania proguard z Androidem Facebook sdk 3.0

Ostrzeżenie: Usunąłem dużo „starego tekstu”, aby utrzymać czystość pytania. Sprawdź historię, jeśli to konieczne.

używamproguard zarówno zmniejszyć, jak i zaciemnić aplikację, która używafacebook sdk 3.0 (Używamtag sdk-version-3.0.2.b). Nie używam pliku JAR. Zamiast tego zaimportowałem sdk do mojego obszaru roboczego, zgodnie z zaleceniamidokumentacja.

W pewnym momencie wykonania aplikacja ładujePlacePickerFragment aby pozwolić użytkownikowi wybrać miejsce, w którym się znajduje. Aby to zakodować, podążam dokładnie zaPrzepyszny samouczek. Kiedy generuję apk debugowania bez użyciaproguard wszystko działa zgodnie z oczekiwaniami. Ale kiedy generuję podpisany apk za pomocąproguard, zawiesza się, gdy PlacePickerFragment ładuje pobliskie miejsca następującym śladem:

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)

Starając się uniknąć tego błędu, zachowałem wszystkie klasy na Facebooku, ale nie działały. Mój obecnyproguard-project.txt plik:

-keep class com.facebook.** {
   *;
}

Mój obecnyprojet.properties plik (fragment):

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

Jak widzisz, mójproguard konfiguracja to „specjalizacja”ten plik.

Jeśli to zrobię-dontobfuscate wproguard-project.txt plik będzie działać. Ale nie rozumiem, żekeep class com.facebook.** powinien już zapobiegać zaciemnianiu klas związanych z Facebookiem. Co sugeruje, że problem nie jest bezpośrednio związany z zajęciami na Facebooku.

Thefragment kodu to rzucacom.facebook.FacebookGraphObjectException jest:

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());
        }
    // [...]
}

Wyraźnie,expectedTypeAsParameterizedType jestnull w wersji do wydania. Ale w obu wersjach (debugowanie i zwalnianie)expectedType jestcom.facebook.model.GraphObjectList berło. Niestety nie rozumiem prawie nic z pojęć związanych z odbiciem Java.

Jak mogę rozwiązać ten problem?

questionAnswers(4)

yourAnswerToTheQuestion