2012-03-27 9 views
6

Moje pytanie pojawiło się bardzo podobne pytanie, this one. Ale zaakceptowana odpowiedź (pojedyncza) wskazuje na inne pytanie, this one, które tak naprawdę nie odpowiada na pierwotne pytanie.Jaki wpływ ma docelowy plik budowania Androida na ostateczny plik APK?

Android stany dokumentacja:

Build docelowa określa, które platforma Android chcesz aplikacja zbudowany przeciw.

Ale co to naprawdę znaczy?

Sposób, w jaki to widzę, może mieć minSdkVersion=4 i targetSdkVersion=10, ale ustawić docelową kompilację na poziom API 4. Co się stanie? Eclipse zakłada, że ​​tworzę dla API Level 4 i żadna metoda, stała lub jakkolwiek zdefiniowana na poziomach API powyżej 4, nie będzie dostępna dla mnie. Jeśli spróbuję ich użyć, aplikacja się nie skompiluje. Jestem tego świadomy.

Ale powiem to inaczej ...

Powiedzmy mam tylko ustawić minSdkVersion=4, targetSdkVersionnie jest zdefiniowane. Jestem również nie używając żadnej metody lub stałej dostępnej tylko na poziomach API powyżej 4. W tej sytuacji, ma to naprawdę znaczenie dla wybranego przeze mnie celu kompilacji? Czy będzie miał jakikolwiek wpływ na ostateczny plik APK?

Odpowiedz

6

docelowej Budowa

cel kompilacji poziom API Eclipse/IntelliJ/niezależnie od używanego IDE jest budowany przeciwko. Ten jest po prostu używany przez system IDE/build, aby wiedzieć, które interfejsy API oferują użytkownikowi . Jeśli budować na poziomie 14 API, aplikacja nadal będzie stanie uruchomić na poziomie API 7, pod warunkiem, że nie nazywają żadnych interfejsów API, które są niedostępne na poziomie API 7.

Najczęściej docelową kompilacji tak samo jak Android: targetSdkVersion, , chociaż nie jest to wymagane.

Źródło: http://simonvt.net/2012/02/07/what-api-level-should-i-target/

2

Jeśli używasz celu wyższego kompilacji, możesz napisać kod, który będzie działał na wcześniejszych wersjach za pomocą odbicia, na przykład. Jeśli chcesz ograniczyć się tylko do interfejsu API 4, nie martw się o cel kompilacji.

Na przykład kierowania wcześniejsze poziomy api przy kompilacji na wyższy można patrzeć na to pytanie:

Android: how to code depending on the version of the API?

+0

To wciąż tak naprawdę nie jest odpowiedź na moje pytanie. –

+0

Wspomniałem, że jeśli chcesz ograniczyć się tylko do API 4, żaden cel nie jest w porządku, ale jeśli wybierzesz cel kompilacji, który jest wyższy i nie użyje żadnej z nowych funkcji, może potencjalnie pracować na wyższym API, używając tych funkcji, ale ponieważ ich nie używasz, nie ma to znaczenia. Oczekuję, że istnieje różnica w kodzie bajtowym, dzięki czemu może korzystać z innego interfejsu API. –

2

The way I see it, I can have the minSdkVersion=4 and targetSdkVersion=10 but set the build target to API Level 4. What will happen? Eclipse assumes I'm developing for API Level 4 and any method, constant or whatever defined on API Levels above 4 will not be available to me. If I try to use them, the application will not compile.

Gdy docelową kompilacji na poziomie API 4, Eclipse nie pozwoli ci kompilować żadnych metod, których używasz wyżej, ponieważ ściśle używa API poziomu 4. Jednak kiedy umieścisz cel kompilacji na wyższym poziomie interfejsu API, w twoim przypadku API poziomu 10, Twój plik APK będzie dostępny do użycia dla telefony od poziomu interfejsu API 4 do 10.

Odpowiedź na drugie pytanie odpowiada na pytanie, które dotyczy celu budowania Androida, zarówno minSdkVersion, jak i targetSdkVersion wpływa na zakres użytkowników, którzy mogą korzystać z aplikacji.

EDIT:

Ponieważ nie zamierzamy określić targetSdkVersion i nie używasz żadnych cech, które jest powyżej poziomu API 4, targetSdkVersion będzie taka sama jak minSdkVersion. Bez względu na to, jaki cel budowy wybierzesz, zostanie automatycznie określony.To naprawdę nie ma znaczenia, który budować cel wybrać, chyba że jest poniżej poziomu API 4

z Android dokumentacji targetSdkVersion:

An integer designating the API Level that the application targets. If not set, the default value equals that given to minSdkVersion. This attribute informs the system that you have tested against the target version and the system should not enable any compatibility behaviors to maintain your app's forward-compatibility with the target version. The application is still able to run on older versions (down to minSdkVersion).

+1

Nic z tego nie jest odpowiedzią na moje pytanie, ponieważ moje pytanie nie dotyczy oczywistych parametrów, na których wszyscy wydają się skupiać. Wiem, co robią i jak działają. To nie jest to, co chcę wiedzieć. –

+0

Odpowiedź Steve'a Haleya w pełni stwierdza, jak to działa i dała przykład. Społeczność uważa, że ​​jest to poprawna odpowiedź na drugie pytanie, do którego się odwołuję. Przepraszam, jeśli cię wprowadzę w błąd. – androidnoob

+1

Pytanie Steve'a Haleya w pełni wyjaśnia działanie atrybutów minSdk/targetSdk. Ale moje pytanie ** nie dotyczy **. –

Powiązane problemy