Иметь GMS и HMS в проекте - PullRequest
5 голосов
/ 29 января 2020

Как можно go иметь как Google Mobile Services, так и Huawei Mobile Services в приложении?

Поскольку Huawei утратила лицензию на GMS, похоже, нам необходимо заменить все используемые службы GMS. в приложениях с Huawei предусмотрены те. Какой будет «лучшая практика» для этого? Использовать ароматы и как-то обрабатывать каждый класс индивидуально, или копировать вставить проект и начать замену? Или ... еще лучше, есть ли способ иметь и то и другое и ... каким-то образом позволить приложению решать, какой сервис использовать на основе устройства, на котором оно работает? Очевидно, что последний предполагает увеличение размера файла apk.

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 30 января 2020

Хотя это действительно зависит от архитектуры вашего приложения, на данный момент есть 2 разумных альтернативы:

  1. Используя варианты и варианты, это даст вам больше гибкости. Создание архитектуры и реализации потребует относительно больше времени, но это чистый подход, обеспечивающий хорошую изоляцию кода. Поскольку эти экосистемы имеют разные рынки (AppGallery для Huawei), со вкусами и вариантами, очень удобно устанавливать sh отдельные конвейеры сборки. Это дает вам возможность поддерживать разные apk для разных экосистем
  2. Используя подход обертки / моста. Просто реализуйте классы-обертки для решения и пересылки запросов в соответствующие конечные точки. При таком подходе можно поддерживать единый для обоих рынков. HMS на самом деле предоставляет надежный инструмент для этого. Он анализирует код, который зависит от GMS, затем автоматически генерирует классы-оболочки и преобразует исходный код для использования классов-оболочек. Он называется «HMS Converter» и даже имеет плагин Android Studio. https://developer.huawei.com/consumer/en/huawei-toolkit/
2 голосов
/ 08 марта 2020

Прежде чем я отвечу на ваш вопрос, вот краткое объяснение, что такое HMS и GMS:

  • HMS означает Huawei Mobile Services
  • GMS означает Google Mobile Services

Вы можете опубликовать sh ваше приложение (которое использует библиотеки Google) в магазине приложений Huawei (с именем AppGallery), но это приложение будет видно и доступно только для загрузки. для устройств Huawei, содержащих HMS + GMS (все устройства до 2020 года имели HMS и GMS).

Однако на более новых телефонах, например, серии Mate 30, P40, будет установлена ​​только HMS. Поэтому, если вы хотите, чтобы ваше приложение было видимым для всех устройств Huawei (HMS + GMS и HMS), вам нужно будет реализовать в своем приложении функцию определения того, какая служба включена на устройстве пользователя. Он решит, какую функцию вызывать (т.е. инициализировать экземпляр Huawei Maps или Google Maps).

Вот код для обнаружения HMS и GMS:

Для мобильных служб Huawei мы используем:

HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(context);

https://developer.huawei.com/consumer/en/doc/development/HMS-References/huaweiapiavailability

Для мобильных сервисов Google мы используем:

GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context);

https://developers.google.com/android/reference/com/google/android/gms/common/GoogleApiAvailability

Вот код, как правильно обрабатывать обнаружение HMS и GMS:

public static boolean isHmsAvailable(Context context) {
    boolean isAvailable = false;
    if (null != context) {
        int result = HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(context);
        isAvailable = (com.huawei.hms.api.ConnectionResult.SUCCESS == result);
    }
    Log.i(TAG, "isHmsAvailable: " + isAvailable);
    return isAvailable;
}

public static boolean isGmsAvailable(Context context) {
    boolean isAvailable = false;
    if (null != context) {
        int result = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context);
        isAvailable = (com.google.android.gms.common.ConnectionResult.SUCCESS == result);
    }
    Log.i(TAG, "isGmsAvailable: " + isAvailable);
    return isAvailable;
}

AFAIK эти классы (HuaweiApiAvailability / GoogleApiAvailability) доступны, если вы реализуете любой из набора Huawei / библиотеки Google.

...