2012-03-27 7 views
6

Mi pregunta apareció una pregunta muy similar, this one. Pero la respuesta aceptada (la única) apunta a otra pregunta, this one, que realmente no responde a la pregunta original.¿Qué impacto tiene el destino de compilación de Android en el APK final?

La documentación Android:

El Tipo de generación especifica qué plataforma Android desea que su aplicación construido en contra.

Pero, ¿qué significa realmente?

De la forma en que lo veo, puedo tener el minSdkVersion=4 y el targetSdkVersion=10, pero establezco el objetivo de compilación en el nivel 4 de la API. ¿Qué sucederá? Eclipse supone que estoy desarrollando para API Nivel 4 y cualquier método, constante o lo que sea definido en Niveles API superiores a 4 no estará disponible para mí. Si trato de usarlos, la aplicación no compilará. Soy consciente de esto

Pero déjame ponerlo de otra manera ...

Digamos que sólo he fijado minSdkVersion=4, targetSdkVersionno es definido. También estoy sin usar ningún método o constante solo disponible en niveles de API superiores a 4. En esta situación, ¿realmente importa el objetivo de compilación que selecciono? ¿Tendrá algún impacto en el APK final?

Respuesta

6

Tipo de generación

tipo de generación se el nivel de API Eclipse/IntelliJ/lo que sea que esté usando el IDE está aumentando. Este es simplemente utilizado por el sistema IDE/build para saber qué API ofrecerle . Si se construye contra la API de nivel 14, la aplicación seguirá siendo capaz de ejecutarse en el nivel API 7, siempre y cuando no llamar a cualquier API que son no está disponible en el nivel API 7.

que en su mayoría se fijó el objetivo de construcción al igual que android: targetSdkVersion, aunque esto no es obligatorio.

Fuente: http://simonvt.net/2012/02/07/what-api-level-should-i-target/

2

Si utiliza un objetivo de compilación más alto, entonces puede escribir código que funcionará en versiones anteriores mediante el uso de la reflexión, por ejemplo. Si desea restringir solo API 4, no se preocupe por el objetivo de compilación.

Para un ejemplo de fijar unos niveles de API anteriores cuando se compila para una más alta se puede ver en esta pregunta:

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

+0

Eso todavía realmente no responde a mi pregunta. –

+0

Mencioné que si solo quieres estar restringido a API 4, entonces no hay ningún objetivo correcto, pero si eliges un objetivo de compilación más alto y no usas ninguna de las características nuevas, puede funcionar con una API más alta. usando esas funciones, pero ya que no las estás usando, no importa. Espero que haya una diferencia en el código de bytes para que pueda usar una API diferente. –

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.

Cuando se establece el destino de compilación a nivel de la API 4, Eclipse no le permitirá compilar ningún método que utilice más allá de eso, porque utiliza estrictamente el nivel 4 de API. Sin embargo, cuando coloca el objetivo de compilación en un nivel de API más alto, en su caso, API de nivel 10, su APK está disponible para su uso. teléfonos desde el nivel de API 4 a 10.

La respuesta a la 2da pregunta responde a su pregunta, que es el objetivo de compilación de Android, tanto minSdkVersion como targetSdkVersion afecta la gama de usuarios que pueden usar su aplicación.

EDIT:

Puesto que no se va a definir targetSdkVersion y no se está usando cualquier característica que es sobre el nivel del API 4, el targetSdkVersion será el mismo que minSdkVersion. Cualquier objetivo de compilación que elijas se especificará automáticamente.Realmente no importa que el objetivo build a escoger a menos que sea bajo el nivel del API 4

De la documentación de Android 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

Nada de eso responde a mi pregunta porque mi pregunta no es acerca de los parámetros manifiestos, algo en lo que todos parecen enfocarse. Sé lo que hacen y cómo funcionan. Eso no es lo que quiero saber. –

+0

La respuesta de Steve Haley indica completamente cómo funciona y dio un ejemplo. La comunidad piensa que es la respuesta correcta a la segunda pregunta, que es a lo que me refiero. Lo siento si te engaño. – androidnoob

+1

La pregunta de Steve Haley indica completamente cómo funcionan los atributos minSdk/targetSdk. Pero mi pregunta ** no es ** sobre eso. –

Cuestiones relacionadas