Как условно использовать API-интерфейсы для приложений для Android-приложений?

С Android-магазинами приложений, предлагающими специфические для рынка API-интерфейсы, как мне создать Android-приложение, которое условно использует библиотеки, специфичные для вендора? Например, Amazon предлагает свои собственные приложения In-App Purchase и API GameCircle. У Google есть свои собственные API лицензирования, и теперь у Ouya будут свои API-интерфейсы для IAP и аппаратных контроллеров.

С распространением этих SDK для конкретных поставщиков становится сложно поддерживать несколько отдельных сборок моих игр для Android. Я хотел бы знать, как создавать мои проекты, чтобы мой код мог просто проверять время выполнения для различных API и использовать их, если avaialble. Что-то вроде

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

Во время сборки я связывался со ВСЕМИ библиотеками, а затем загружал одно и то же универсальное приложение в каждый магазин.

    Я использую это сейчас.

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

    Предположительно, для установки Amazon возвращаемое значение getInstallerPackageName является «com.amazon.venezia». Для приложений, установленных в Google Play, результатом является «com.android.vending» (хотя раньше это было «com.google.android.feedback». Руководство APK устанавливает возврат null.

    Я не смог найти официального подтверждения, что этот подход действительно. Но я не смог найти лучшего подхода.