2013-04-08 18 views
40

Otrzymuję następujące ostrzeżenie podczas kompilowania projektu cocos2d-x z cygwin.Android NDK: OSTRZEŻENIE: APP_PLATFORM Android-9 jest większy niż Android: minSdkVersion 8

`/cygdrive/e/project/MyGame/proj.android ` 
/cygdrive/e/android-ndk-r8e/build/core/add-application.mk:128: Android NDK: WARNING:APP_PLATFORM android-9 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml 

Używam wersji NDK r8e. Moja minimalna wersja SDK to 8 w moim AndroidManifest.xml, ale nie określam APP_PLATFORM jako android-9 w dowolnym miejscu. Jak mogę to zmienić na 8.

Czy ktoś może mi powiedzieć, jak rozwiązać to ostrzeżenie, ponieważ myślę, że może to powodować problemy.

+0

Jakiej wersji pakietu SDK używasz? – Robin

+0

FWIW, jest naprawiony w NDK r9 _something_ –

+0

Możliwy duplikat [Jak pozbyć się ostrzeżenia kompilatora NDK: "APP \ _PLATFORM jest większy .." i "Nieprawidłowy pakiet"] (http://stackoverflow.com/questions/15739409/how-get-rid-of-ndk-kompilator-ostrzeżenie-aplikacja-platforma-jest-większy-i-nieważny-pac). Zobacz także [OSTRZEŻENIE: APP_PLATFORM android-14 jest większy niż android: minSdkVersion w /home/user/MyApp/AndroidManifest.xml](http://stackoverflow.com/q/21087904/608639). – jww

Odpowiedz

60

Wygląda na to, że używasz systemu Android-9 jako środowiska wykonawczego. Możesz umieścić APP_PLATFORM := android-8 w swoim pliku Application.mk, a ostrzeżenie zniknie.

+0

Czy to ma wpływ? – radj

+1

Musisz mieć pewność, że Twój kod natywny spełnia to ograniczenie, np. działa na danej platformie. –

+0

dzięki, która rozwiązuje mój problem. – Sean

13

Powodem ostrzeżenia/błędu jest poinformowanie użytkownika, że ​​kompiluje kod natywny dla platformy docelowej wyższej niż "minimalna" liczba widoczna w manifeście. Zasadniczo mówi się "uważaj na używanie funkcji nieobsługiwanych na starszym systemie operacyjnym. Zmiana Application.mk jest w porządku i nie powinna mieć żadnego rzeczywistego niekorzystnego wpływu na skompilowany kod.

~~ Alternatywne rozwiązania.

Dla r8 można zmienić ustawienia kompilacji, aby uznać je za ostrzeżenie, a nie błąd. To działało w r8, ale jest tylko częściową poprawką w r9.

Dla NDK R9 rev (prace w innych obroty zbyt ale lokalizacja/linia # mogą się różnić)

$ {NDK} /build/core/add-application.mk linia 138

add "#" na początku linii.

# $ (nazywają __ndk_info, UWAGA: APP_PLATFORM $ (APP_PLATFORM) jest większa niż android: minSdkVersion $ (APP_MIN_PLATFORM_LEVEL) w $ (APP_MANIFEST))

Jeden znak, 30 sekund fix ... idź debugowania kodu macierzystego .

1

Jeśli chcesz skompilować bibliotekę macierzystą dla nowszej wersji niż minSdkVersion, możesz po prostu skonfigurować Eclipse, aby zmienić błąd na ostrzeżenie. Może to być przydatne, jeśli wiesz, że twój kod Java NIE będzie ładował natywnej biblioteki w starszych wersjach Androida. (Ostrzeżenie: jeśli tego nie zagwarantujesz, to załadowanie biblioteki natywnej na starszych wersjach Androida niż określono w APP_PLATFORM może zakończyć się niepowodzeniem i spowodować awarię aplikacji, jeśli istnieją niezadowalające linki do biblioteki dynamicznej - np. Jeśli twoja APP_PLATFORM ma numer 9 i używasz OpenSLES, to nie powiedzie się, jeśli spróbujesz użyć JNI na Androidzie 2.2 lub wcześniejszym, ale tak długo, jak wie o tym strona Java i zapewnia, że ​​loadLibrary nigdy nie jest wywoływana w starszych wersjach, to wszystko jest w porządku.)

Ty można zmienić ustawienia Eclipse, wykonując następujące kroki, przewidziane przez kogoś z Google (na this link) (ale także zobaczyć moją Ważna uwaga poniżej):

w Eclipse:

- Window -> Preferences -> C/C++ -> Build -> Settings 
- Select CDT GNU C/C++ Error Parser 
- In the Error Parser options at the bottom, add a new entry with the following contents: 

Severity: Warning 
Pattern: (.*?):(\d+): Android NDK: WARNING:(.*) 
File: $1 
Line: $2 
Description: $3 

WAŻNE! Google Guy nie zauważył, że należy również użyć przycisku "Przenieś w górę" w ustawieniach, aby przenieść nową regułę na górę, ponieważ w przeciwnym razie niektóre inne bardziej ogólne zasady spowodują jej zaciemnienie i nie zadziała.