2012-07-25 9 views
35

Por lo que yo sé, la biblioteca de soporte está usando porque los dispositivos viejos no tienen nuevas API. Por ejemplo, no saben qué es Fragment y cómo implementarlo. Por lo tanto, estos comportamientos se definen en la biblioteca de soporte.¿Cómo funciona la Biblioteca de asistencia de Android?

Por lo tanto, mi pregunta principal es, ¿cuál es/son la diferencia (s) entre la biblioteca de Fragmento en la biblioteca de soporte con su hermano que se introduce en API 11 (Android v3.0, Honeycomb).

Mi segunda pregunta es, si es posible poner cada nueva API en la biblioteca de soporte, ¿por qué tenemos dos tipos de bibliotecas? Quiero decir que Android puede lanzar todas las API solo debajo de la biblioteca de soporte en lugar de la biblioteca de soporte y la biblioteca X.xx de la versión de Android.

Respuesta

38

Por lo que yo entiendo, las bibliotecas de soporte pueden funcionar como una alternativa de las API integradas, pero no se supone que lo sean, porque afectan directamente el tamaño de la aplicación.

Por ejemplo, una biblioteca de soporte es de 2MB, y para usar su funcionalidad, necesita todas las clases, recursos, etc. (de 2MB), ahora classes.dex (archivo ejecutable Dalvik de todas las clases utilizadas en la aplicación) de mi la aplicación también incluye clases de biblioteca de soporte, y lo mismo para los recursos. Entonces, si la biblioteca de soporte no tiene el tamaño de mi aplicación de 1 MB, ahora con la biblioteca de soporte el tamaño es de 2 MB extra, lo que significa 3 MB en total. Supongamos que esta función de biblioteca de soporte es tan común que en un solo dispositivo, si tengo 10 aplicaciones, al menos 9 están usando esta misma biblioteca de soporte, entonces 9 * 2 = 18MB en mi dispositivo está siendo utilizado por misma biblioteca de soporte, que se repite en todas las aplicaciones, lo que es malo, porque por ahora 18 MB no es mucho, pero el espacio requerido puede aumentar, si tiene más aplicaciones usando esa biblioteca de soporte.

Por lo tanto, la mejor opción es tener esa biblioteca de soporte de 2MB ya en su sistema operativo para cualquier cantidad de aplicaciones, en lugar de tenerla para cada aplicación. Por lo tanto, las bibliotecas de soporte están destinadas a ser utilizadas cuando realmente desea algunas características eficientes en su aplicación para admitir versiones anteriores.

Otra pregunta surgen aquí:

por qué no se añade esta biblioteca de soporte al sistema operativo como su propia actualización, de modo que cada aplicación sin problemas de tamaño puede tener acceso a esa funcionalidad?

La respuesta es que podría haber muchos errores. Supongamos que algunos usuarios no tienen instalada esa actualización (biblioteca de soporte) ...

También existe la posibilidad de que, como una actualización, no funcione tan eficiente como se supone que sea, o puede causar problemas al integrarse con el Sistema operativo, como ya vimos, cada sistema operativo (Windows, Linux, Mac) viene con nuevas versiones, en lugar de simplemente dar actualizaciones de por vida para todas las funciones nuevas.

+3

Si el desarrollador no necesita ninguna de las características que proporciona la biblioteca de soporte, entonces seguro que no la use. Sin embargo, en el gran esquema de cosas, 2MB realmente no es mucho, y preferiría una aplicación que funcione bien y compatible con versiones anteriores que una que haya sido despojada de sus facciones simplemente porque quien la desarrolló estaba preocupado de que el APK era demasiado grande Además, probablemente puedas usar Proguard para reducir/comprimir el tamaño del archivo APK de la aplicación. –

+5

Tantas frases largas ... Realmente difícil de entender. – CDT

+0

No estoy de acuerdo con su respuesta sobre un usuario que no tenga la biblioteca de soporte podría causar muchos errores. El archivo de manifiesto ya le permite limitar su aplicación solo para trabajar en un dispositivo con una determinada versión de OpenGL. Podrían haber hecho lo mismo para la Biblioteca de soporte, y hasta podrían extender la funcionalidad para permitir una dependencia dinámica en cualquier biblioteca. Así es como ya está hecho en la mayoría de los sistemas operativos basados ​​en Linux. –

3

La biblioteca de soporte de hecho no tiene todo lo que está en las nuevas API. Admite partes de Fragment API, pero aún no es compatible con ActionBar. Para eso necesitas otra biblioteca como ActionBar Sherlock.

¿Por qué hay dos bibliotecas?

Debido a que parte del problema era que Google sólo volver portado algunas de las cosas, pero mi entendimiento es que, además, algunas de las nuevas funciones no se puede volver portado debido a limitaciones fundamentales marco OS y APIs que faltan profundas en el núcleo del marco de la interfaz de usuario de Android.

-3

Fragmentos de la biblioteca de soporte equivalente a fragmentos de Honeycomb +.

Para segunda búsqueda, a partir de documentación:

v13 es un superconjunto de v4 e incluye clases de apoyo adicionales para trabajar con APIs v13

es decir, el mismo funcional, simplemente adaptado a v13 API.

Biblioteca de soporte de v4 modificado con mapas.

1

Android se le ocurrió funciones geniales de fragmentos y barra de acción en los últimos lanzamientos.

Ahora, si queremos utilizar estas características y también admitimos la versión anterior de Android, tendremos que escribir un código dependiente de la versión altamente desordenado, que no es bueno.

Para salvarnos de todos estos problemas, Android creó una biblioteca de soporte que no brinda soporte completo para las nuevas características, pero que es lo suficientemente buena para permitir a los desarrolladores escribir códigos claros compatibles con todos los dispositivos.

La respuesta a su segunda pregunta es muy simple, los fragmentos están integrados en la versión v3.0 y si desea que la aplicación se ejecute solo en v3.0 +, entonces realmente no tiene que incluir la biblioteca externa.

8

Lo que ya se ha dicho es verdad. Aunque faltan algunos detalles. De hecho, tuve la oportunidad de asistir a una sesión en el último Google IO, donde hablaron especialmente de eso. En realidad, fue sorprendente para mí saber que la biblioteca de soporte no aloja el código para todas las posibles versiones de API, sino que es una adaptación de las nuevas características que consideran lo suficientemente relevantes como para que estén disponibles para plataformas más antiguas.Por lo que la forma en que funciona por lo general es la siguiente:

  • Digamos que tenemos que utilizar la nueva marca (disponible de API 16) ConnectivityManager para realizar un seguimiento de los cambios de la red
  • incluimos bibliotecas de soporte v4 y usamos la clase
  • La forma en que funciona después es que el sistema verificará nuestra versión API y ejecutará el código nativo incorporado en caso de que estemos en la API 16 o ejecutaremos el código de la biblioteca de soporte en cualquier otro caso.

Por lo tanto, actúa como un tipo de puerta de enlace de ruta. La razón de ser es que generalmente es más eficiente (y mejor rendimiento) utilizar el último código optimizado para el último sistema operativo y las últimas mejoras del sistema (es decir, aceleración de hardware).

No obstante, hay algunos elementos que no se han traducido a la biblioteca de compatibilidad, ya que están en el código nativo incorporado. Por ejemplo, los fragmentos no estaban destinados a volver a escribirse, ya que son de API13, ya que son un gran componente que debe ejecutarse en una amplia gama de escenarios diferentes dentro del sistema y dispositivos con menos capacidades.

En última instancia, y porque todo esto, se recomienda utilizar las bibliotecas compats que se conoce como una buena práctica, especialmente si tiene intención de hacer su aplicaciones/código disponible para versiones anteriores (que debe ser la forma ideal)

+0

Proporcione más información sobre esta sesión. ¿Hay un video o script en línea? – OneWorld

+0

Me temo que no puedo recordar la sesión específica, pero aquí están todos los videos de IO '12. https://developers.google.com/events/io/2012/ Espero que ayude. –

13

Android 4.0.x (ICS) tiene muchas funciones adicionales en comparación con permite, por ejemplo, Android 2.3.x (Gingerbread). Las bibliotecas de compatibilidad están ahí para salvar algunos de los cambios que se agregaron a ICS que -podría- respaldarse con Gingerbread. "podría ser" la frase clave aquí porque hay una tonelada de cambios realizados en ICS que nunca funcionarían con Gingerbread y aquellos, por supuesto, no obtendrán una biblioteca de compatibilidad.

Los fragmentos, por ejemplo, que ha mencionado, en realidad se hacen de forma ligeramente diferente en ICS que en la biblioteca de compatibilidad porque ICS tiene más funciones que puede usar. Si observa el código de ICS para la clase Fragmentos, no son los mismos que los de la biblioteca de compatibilidad. Es un segundo conjunto de código para hacer que algo "como" los Fragmentos en ICS se use en una versión anterior como Gingerbread sin que el programador note mucha diferencia.

Ese es el punto de las bibliotecas de compatibilidad y la razón por la que no se utilizan para parchear extensamente Gingerbread para usar todas las características en ICS (simplemente no pueden). El objetivo de las bibliotecas de compatibilidad es interconectar las cosas disponibles en las versiones más nuevas de Android, como ICS, de la manera ICS en versiones anteriores como GB, hecho a la manera de GB.

En cuanto a por qué no solo mantienen la biblioteca de soporte creciendo y dejando el mismo sistema operativo base, la respuesta a eso es problemas de compatibilidad. Si un usuario solo tiene v4 y v12 está fuera, ¿qué ocurre? Android ahora usa la versión Android API del sistema operativo como base para la compatibilidad de aplicaciones y los desarrolladores tienen una opción a que incluyen bibliotecas de soporte (aumentando el tamaño de su aplicación, pero dándoles características más nuevas). Cada aplicación que usa bibliotecas de soporte, las incluye de manera independiente (es decir, 4 aplicaciones = 4x incluidas).

La idea es que solo descargue aplicaciones compatibles con la versión actual de su sistema operativo (en lo que respecta a Google Play) y puede optar por incluir bibliotecas de soporte para mantener la apariencia de su aplicación compatible. APIs anteriores, que aún no tienen características que usted elige tener disponibles para esos usuarios en API más nuevas. Es realmente un aspecto y una consideración más que cualquier otra cosa.

Espero que aclare las cosas :)

+0

¿Las bibliotecas de soporte están incluidas en el sistema operativo correcto? – Clocker

+1

No exactamente. Las versiones más nuevas del sistema operativo tienen características que puede implementar sin las bibliotecas de soporte, pero si desea que los teléfonos más antiguos funcionen, debe agregar manualmente las bibliotecas de soporte y usar las clases en esas (son archivos simplemente.jar que agrega a su Construir camino). ADT ahora auto agrega bibliotecas de soporte en su proyecto si se dirige a una API mínima más baja para que pueda obtener esas funciones avanzadas de todos modos, pero hacen que su proyecto ocupe más espacio.A veces es mejor apuntar a una API más alta para que uses código nativo, pero eso depende de ti y de la compatibilidad con la que puedes vivir. – ComputerEngineer88

Cuestiones relacionadas