2011-07-02 21 views
12

Używam pakietu zgodności v4 w moim projekcie, ale gdy próbuję wyeksportować podpisaną aplikację, otrzymuję następujący komunikat od Proguard. Przeglądałem go przez cały wieczór, ale nie znalazłem odpowiedzi, by to rozwiązać.Błąd programu podczas eksportowania podpisanej aplikacji przy użyciu pakietu zgodności android.upd.v4.app o strukturze plastra miodu

[2011-07-03 01:46:29 - worldscopeApp] Proguard returned with error code 1. See console 
[2011-07-03 01:46:29 - worldscopeApp] Warning: android.support.v4.app.ActivityCompatHoneycomb: can't find referenced method 'void invalidateOptionsMenu()' in class android.app.Activity 
[2011-07-03 01:46:29 - worldscopeApp] Warning: android.support.v4.app.ActivityCompatHoneycomb: can't find referenced method 'void dump(java.lang.String,java.io.FileDescriptor,java.io.PrintWriter,java.lang.String[])' in class android.app.Activity 
[2011-07-03 01:46:29 - worldscopeApp] Warning: android.support.v4.view.MenuCompatHoneycomb: can't find referenced method 'void setShowAsAction(int)' in class android.view.MenuItem 
[2011-07-03 01:46:29 - worldscopeApp]  You should check if you need to specify additional program jars. 
[2011-07-03 01:46:29 - worldscopeApp] Warning: there were 3 unresolved references to program class members. 
[2011-07-03 01:46:29 - worldscopeApp]   Your input classes appear to be inconsistent. 
[2011-07-03 01:46:29 - worldscopeApp]   You may need to recompile them and try again. 
[2011-07-03 01:46:29 - worldscopeApp]   Alternatively, you may have to specify the options 
[2011-07-03 01:46:29 - worldscopeApp]   '-dontskipnonpubliclibraryclasses' and/or 
[2011-07-03 01:46:29 - worldscopeApp]   '-dontskipnonpubliclibraryclassmembers'. 
[2011-07-03 01:46:29 - worldscopeApp] java.io.IOException: Please correct the above warnings first. 
[2011-07-03 01:46:29 - worldscopeApp] at proguard.Initializer.execute(Initializer.java:308) 
[2011-07-03 01:46:29 - worldscopeApp] at proguard.ProGuard.initialize(ProGuard.java:210) 
[2011-07-03 01:46:29 - worldscopeApp] at proguard.ProGuard.execute(ProGuard.java:85) 
[2011-07-03 01:46:29 - worldscopeApp] at proguard.ProGuard.main(ProGuard.java:499) 
+0

http://stackoverflow.com/a/17988163/1318946 –

Odpowiedz

26

To właśnie używam w moim proguard.cfg:

-dontwarn **CompatHoneycomb 
-keep public class * extends android.support.v4.app.Fragment 

Więcej ogóle jest:

-dontwarn **CompatHoneycomb 
-keep class android.support.v4.** { *; } 

Ale spowoduje to większy rozmiar pakietu APK, więc używaj go tylko wtedy, gdy pierwszy nie działa.

+0

Wielkie dzięki! Drugie rozwiązanie wykonało zadanie. BTW, trzecią opcją jest zmiana docelowej kompilacji projektu na poziom API 11 lub wyższy. – Goran

+0

Potrzebowałem tego również: -dontwarn android.support. ** – Fraggle

34

Wygląda na to, że niektóre klauzule w android.support.v4 nie są kompatybilne z niektórymi klasami w systemie Android. Jeśli masz pewność, że to nie jest problem, możesz określić, że ProGuard zignoruje te problemy i będzie kontynuować przetwarzanie kodu.

Patrz instrukcja ProGuard> Rozwiązywanie problemów> Uwaga: nie można odnaleźć odwołuje Pole/metoda

+2

ten pracował dla mnie, a także, mając na uwadze, używając ** CompatHoneycomb nie. To rozwiązanie jest również wymieniane przez Dianne Hackborn tutaj: https://plus.google.com/105051985738280261832/posts/K1tGvKG1NYv) –

+0

Świetnie. Zostało to teraz dodane w proguard-android.txt i proguard-android-optimize.txt, które pochodzą z pakietu SDK systemu Android. –

0

Powinieneś ustawić android: targetSdkVersion na SDK> = plaster miodu.

uzyskać informacje Używam ten

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="13"/>