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

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

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

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

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

1 ответ

Решение

Я использую это в настоящее время.

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 возвращает ноль).

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

Другие вопросы по тегам