Tak, mam PRÓBA zwolnić niektóre programy, ale Proguard daje mi ból głowy.
Kiedy próbuję wyeksportować za pomocą proguard, otrzymuję wiele ostrzeżeń, np. „Nie mogę znaleźć klasy, do której się odwołuje”
Na przykład:
[2011-08-07 17:44:37 - GAME] Warning: org.simpleframework.xml.stream.StreamReader: can't find referenced class javax.xml.stream.events.XMLEvent
[2011-08-07 17:44:37 - GAME] Warning: there were 52 unresolved references to classes or interfaces.
[2011-08-07 17:44:37 - GAME] You may need to specify additional library jars (using '-libraryjars'),
[2011-08-07 17:44:37 - GAME] or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-08-07 17:44:37 - GAME] java.io.IOException: Please correct the above warnings first.
[
Ostrzeżenia wydają się być związane z simpleframework, więc w moim pliku konfiguracyjnym proguard dodałem:
-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar
Gdzie pathtoprojecttolibs
jest ścieżka do słoików, do których odwołuje się mój projekt.
To nie ma znaczenia.
Jeśli simpleframework odwołuje się do javax, czy mogę powiedzieć programowi proguard, aby to również ignorował?
Jakieś pomysły?
Odpowiedzi:
org.simpleframework.xml.stream.StreamReader
w twoim kodzie odnosi się dojavax.xml.stream.events.XMLEvent
. Ta ostatnia klasa jest częścią środowiska uruchomieniowego Java (rt.jar
), ale nie jest częścią środowiska uruchomieniowego systemu Android (android.jar
), więc ProGuard ostrzega, że coś może być zepsute. Jeśli masz pewność, że Twoja aplikacja i tak działa, możesz określićPiekło ProGuard?
źródło
-dontwarn javax.xml.**
-libraryjars <java.home>/lib/rt.jar
rozwiązało problem dla mnie.-dontwarn javax.xml.stream.**
-dontwarn
śpiewanie GUI?W moim przypadku główna przyczyna była tutaj . Ostrzeżenia, które możesz po prostu pominąć:
Oryginalny Odpowiedź jest tutaj
źródło
Ten błąd występuje, ponieważ używane biblioteki zależą od innych bibliotek, które nie są w rzeczywistości używane, ale Proguard ich szuka.
Dodaj swoje linie -dontwarn do pliku proguard-rules.pro w projekcie Androida, aby wyłączyć te ostrzeżenia.
Możesz znaleźć zależności, które musisz dodać do swojego proguard-rules.pro w śladzie stosu swojego błędu.
źródło
Powinieneś to uwzględnić w swojej konfiguracji Proguard:
źródło
Mój magiczny klucz, który rozwiązał moje godziny wyszukiwania: Dodaj to do progruard-android.txt
źródło
Hmm. Czytając to ostrzeżenie, wydaje się, że biblioteka, której próbujesz użyć, jest zależna od javax.xml.stream.events. Nie sądzę, żeby przestrzeń nazw w ogóle była zawarta w Androidzie. (Zobacz Indeks pakietów ).
Spróbuj wdrożyć go na emulatorze bez korzystania z programu Proguard i sprawdź, czy działa. Domyślam się, że nie, jeśli to ostrzeżenie jest dokładne.
źródło
Myślę, że to skrajny przypadek, ale w moim przypadku musiałem całkowicie wyczyścić folder kompilacji na moim proguardzie Jenkinsa, próbując pracować ze starym kodem, którego już nie było - na wypadek, gdyby ktoś miał ten sam problem.
źródło
W moim przypadku nic nie zmieniłem i zaczęło się pojawiać ostrzeżenie. Problem dotyczył zepsutych pamięci podręcznych gradle. Sprawdź moją drugą odpowiedź . Dzielę się tym, ponieważ znalezienie problemu zajęło mi 2 godziny:]
źródło
Dodaj tę linię do swojego
proguard-rules.pro
pliku w katalogu skryptów gradle:gdzie
package.class.name
jest nazwą pakietu z nazwą klasy dołączonego pliku jar.Na przykład:
źródło