¿Cómo sé cuándo utilizar las clases de soporte?

Soy novato en desarrollo para la plataforma de Android y tratando de entender cómo puedo saber o predecir cuando tengo que usar clases de soporte? Esta es probablemente una pregunta estúpida, pero déjame darte un ejemplo simple. Digamos que quiero añadir una funcionalidad de uso compartido a mi aplicación para ir al DAC y ver allí un ejemplo de cómo se puede hacer esto. Leí detenidamente el manual y veo la nota sobre las limitaciones

Nota: ShareActionProvider está disponible empezando con API Nivel 14 y superior

Parece que esto está bien para mí, ya que la minSdkVersion se establece en 14 en mi aplicación. Copiar y pegar ese fragmento a mi proyecto, iniciar la aplicación y … se bloquea con el siguiente error:

05-21 12:42:07.638: E/AndroidRuntime(25291): java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider() 

Actualizo mis fuentes para usar el siguiente código en lugar del que encontré en la documentación:

 MenuItem menuItem = menu.findItem(R.id.action_share); ShareActionProvider mShareActionProvider = (ShareActionProvider)MenuItemCompat.getActionProvider(menuItem); 

Inicio de la aplicación. A primera vista está funcionando, pero en vez de compartir icono puedo ver el texto COMPARTIR en el ActionBar. Humm, después de googlear alrededor de reemplazo de la siguiente línea en el diseño del menú

 android:actionProviderClass="android.widget.ShareActionProvider" 

a

 app:actionProviderClass="android.support.v7.widget.ShareActionProvider" 

¡Hooray! ¡Finalmente tengo lo que quiero!

Esta no es la primera vez que experimento tales obstáculos mientras aprendo la plataforma Android, así que estoy tratando de encontrar si hay alguna regla que me ayude a predecir tales situaciones?

En cuanto a la biblioteca de soporte, no que he añadido a propósito. Esta biblioteca se agregó automáticamente cuando creé el proyecto en Android Studio. Después de jugar un poco con Android Studio he descubierto que se añade automáticamente al proyecto a menos que el min SDK se establece en las últimas 21 o 22 versiones. Así que técnicamente casi todas las aplicaciones tienen que usar esta biblioteca para ejecutarse en una gama más amplia de dispositivos Android. Si esto es cierto, ¿por qué los materiales de formación y guía de Android no utilizan clases de soporte en ejemplos?

Cualquier ayuda y consejo será muy apreciada.

Estoy tratando de encontrar si hay alguna regla general que me ayude a predecir tales situaciones

No tengo ni idea de lo que "tales situaciones" están más allá de la que usted ha citado aquí.

En este caso específico, el recurso de menú citado en el primer paso utiliza android:showAsAction="ifRoom" lugar de algo como app:showAsAction="ifRoom" . Este último es necesario si está utilizando el backport de la barra de acción appcompat-v7 . Por lo tanto, este ejemplo no debe utilizar el backport de la barra de acción appcompat-v7 .

No hay duda de que la documentación podría mejorarse en esta área, ya sea para proporcionar instrucciones para ambas implementaciones barra de acción, o al menos para indicar de forma positiva qué barra de acción implementación que están utilizando.

Así que técnicamente casi todas las aplicaciones tienen que usar esta biblioteca para correr en una gama más amplia de dispositivos Android.

No. Las aplicaciones cero tienen que usar appcompat-v7 para ejecutarse en una amplia gama de dispositivos Android, yendo hasta el nivel 1 de la API.

Sin embargo:

  • Si quieres una barra de acción en los dispositivos que ejecutan Android 1.x / 2.x, necesitas un backport de la barra de acción, y appcompat-v7 es el único backport con todas las funciones actualmente mantenido que conozco (dado que ActionBarSherlock está obsoleto)

  • Si quieres probar tener una interfaz de usuario que se asemeje a Material Design en dispositivos que ejecutan Android 4.4 y appcompat-v7 posteriores, las ediciones actuales de appcompat-v7 hacen

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.