¿Cómo usar de forma condicional las API específicas del proveedor para las aplicaciones de Android?

Con las tiendas de aplicaciones de Android que ofrecen APIs específicas de mercado, ¿cómo construyo una aplicación de Android que utiliza de forma condicional bibliotecas específicas de proveedores? Por ejemplo, Amazon ofrece su propia aplicación en la compra y "GameCircle" API. Google tiene sus propias API de licencias, y ahora Ouya tendrá sus propias APIs para IAP y controladores de hardware.

Con la proliferación de estos SDKs específicos de proveedores, se está volviendo difícil mantener varias versiones separadas de mis juegos para Android. Me gustaría saber cómo construir mis proyectos para que mi código sólo puede comprobar en tiempo de ejecución para varias API y utilizarlos si avaialble. Algo como

if (amazon api is available) // Do some amazon-specific stuff 

En el tiempo de construcción que se vincular con todas las bibliotecas a continuación, cargar la misma aplicación universal a cada tienda.

    One Solution collect form web for “¿Cómo usar de forma condicional las API específicas del proveedor para las aplicaciones de Android?”

    Estoy usando esto actualmente.

     private boolean isAmazonInstall() { PackageManager pm = getPackageManager(); String installationSource = pm.getInstallerPackageName(getPackageName()); if (installationSource != null && installationSource.startsWith("com.amazon")) { return true; } return false; } 

    Al parecer, para una instalación de Amazon, el valor de retorno de getInstallerPackageName es "com.amazon.venezia". Para las aplicaciones instaladas desde Google Play, el resultado es "com.android.vending" (aunque usó para ser "com.google.android.feedback". Manual APK instala return null.

    No he podido encontrar la confirmación oficial de que este enfoque es válido. Pero no he podido encontrar un enfoque mejor.

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