Настройка модемов Huawei с помощью AT-команд. » Интересный Проект Диполя

fcddddeed Каталог

Основные причины отказа в публикации

  1. Политика конфиденциальности не соответствует стандарту

  2. Указанный статус Гонконга и Макао не соответствует стандарту.Гонконг и Макао не могут быть указаны как страны на странице выбора региона. Китай очень трепетно относится к этому. Пример:

3.Приведены ссылки на сторонние магазины приложений

Функция для оценки и написания отзыва в приложении содержит ссылку на сторонние магазины приложений без ссылки на AppGallery

Product flavors

Создадим два product flavor – “hms” и “gms”:

android {
	
    …
    flavorDimensions 'services'
    productFlavors {
        hms {
            dimension 'services'
            applicationIdSuffix '.huawei'
        }
        gms {
            dimension 'services'
        }
    }
}

По умолчанию, Android Studio заводит sourceSet main, в котором содержатся общие файлы с кодом. Создаем папки для каждого flavor’a:

 New -> Folder -> Выбираем нужный тип папки:

Затем в build.gradle того модуля, где мы создали папку, должен автоматически вставиться следующий код (например, если мы выбрали hms): 

android {
	
    …
    productFlavors {
        ...
    }
    sourceSets {
        hms {
            java {
                srcDirs 'src/hms/java'
            }
            ...
        }
    }
}

Теперь Gradle будет включать в сборку файлы, соответствующие выбранному flavor’у. Важно, чтобы файлы в этих директориях имели одинаковое название и лежали в пакетах с одним и тем же названием.

Пример. Мы используем Auth API. У нас будет абстракция — интерфейс AuthRepository, хранящийся в main/, а его имплементации для разных сервисов лежат в gms/ и hms/ директориях — тогда в сборку, например, для HMS, попадет именно имплементация с huawei сервисами.

Если проект многомодульный, то в каждом модуле необходимо прописать flavor’ы и при необходимости source sets. Код с flavor’ами можно вынести в отдельный файл. 

Создадем .gradle файл в корневой папке проекта, назовем его flavors.gradle:

ext.flavorConfig = {

    flavorDimensions 'services'
    productFlavors {
        hms {
            dimension 'services'
            ext.mApplicationIdSuffix = '.huawei'
        }
        gms {
            dimension 'services'
        }
    }
    productFlavors.all { flavor ->
        if (flavor.hasProperty('mApplicationIdSuffix') && isApplicationProject()) {
            flavor.applicationIdSuffix = flavor.mApplicationIdSuffix
        }
    }
}

def isApplicationProject() {
    return 
    project.android.class.simpleName.startsWith('BaseAppModuleExtension')
}

Помимо самих flavor’ов, в экстеншене flavorConfig лежит код с циклом по flavor’ам — там будет определяться app модуль, которому присваивается applicationIdSuffix.

Затем в каждом модуле прописываем следующее:

apply from: "../flavors.gradle"

android {
    buildTypes {
        ...
    }
    ...
    with flavorConfig
}

Для использования подходящих плагинов во время процесса компиляции можем добавлять такие if-else конструкции:

apply plugin: 'kotlin-kapt'
...
if(getGradle().getStartParameter().getTaskNames().toString().toLowerCase().contains("hms")) {
    apply plugin: 'com.huawei.agconnect'
} else {
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'com.google.firebase.crashlytics'
}
...

Для каждого flavor’а  мы можем включать dependencies, необходимые только ему. Перед implementation прописываем его название:

// Firebase
gmsImplementation platform('com.google.firebase:firebase-bom:26.1.0')
gmsImplementation 'com.google.firebase:firebase-crashlytics-ktx'
gmsImplementation 'com.google.firebase:firebase-analytics-ktx'

// Huawei services
hmsImplementation 'com.huawei.agconnect:agconnect-core:1.4.2.300'
hmsImplementation 'com.huawei.hms:push:5.0.4.302'
hmsImplementation 'com.huawei.hms:hwid:5.0.3.301'

Внедряем hms сервисы в проект

Почти на каждый сервис Google у Huawei есть альтернатива:

Этот список можно продолжать долго — у Huawei довольно обширный перечень сервисов. Как же подключить их в наш проект?

Прежде всего, нам нужно определиться, как мы будем внедрять сервисы. Есть несколько вариантов:

В этом деле нам пригодится плагин HMS Toolkit. Он поможет интегрировать HMS Core с минимальными затратами и высокой эффективностью. К сожалению, HMS Toolkit поддерживает конвертацию не всех сервисов, и лучше заранее уточнить, сможет ли он перенести работу ваших.

Нам нужен инструмент Convertor. Он проанализирует проект на наличие GMS сервисов и покажет места, где требуется заменить код с GMS на HMS.

  1. В меню выбираем HMS > Convertor > New Conversion:

2.В появившемся окошке указываем директорию, где создастся бэкап проекта до конвертации.

3.Здесь плагин представляет результаты анализа проекта: какие GMS сервисы у нас содержатся и какие из них конвертируемые. Также нам предлагается проверить sdk version для соответствия требованиям HMS.

На этом шаге мы должны выбрать стратегию конвертации:

4.После анализа проекта, мы видим список мест в коде, где необходима конвертация.

По клику на каждый пункт произойдет навигация в файл, где будет предложена конвертация:

Глобальные команды, режимы работы, cходства и различия с cli cisco.


Оборудование HUAWEI, построенное на базе операционной системы VRP, имеет cisco-like интерфейс командной строки. Принципы остаются теми же самыми, меняется только синтаксис.

В CLI оборудования HUAWEI существуют 2 режима командного интерфейса:

Настройка eth-trunk

interface Vlanif100
 ip address 1.1.1.2 255.255.255.252
#
interface GigabitEthernet0/0/23
eth-trunk 1
#
interface GigabitEthernet0/0/24
eth-trunk 1
#
interface Eth-Trunk0
 port link-type trunk
 port trunk allow-pass vlan 100
#

Настройка stp

Для тестирование STP были соединены коммутаторы Cisco 2960 и HUAWEI Quidway S5328C-EI.


Для включения STP на коммутаторе необходимо в режиме system-view ввести команду

[Quidway] stp enable

По умолчанию, приоритет коммутатора HUAWEI, так же как и коммутатора Cisco равен 32768.

Просмотр информации о текущем состоянии портов:

[Quidway]display stp brief
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        ALTE  DISCARDING      NONE
   0    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE

Видно, что один из портов заблокирован, т. к. приоритет коммутатора Cisco оказался больше.Просмотр глобальной информации об STP:

[Quidway]disp stp
-------[CIST Global Info][Mode STP]-------
CIST Bridge         :32768.781d-baa4-b6a7
Config Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
Active Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
CIST Root/ERPC      :8192 .2893-fe2a-9a80 / 199999
CIST RegRoot/IRPC   :32768.781d-baa4-b6a7 / 0
CIST RootPortId     :128.2
BPDU-Protection     :Disabled
TC or TCN received  :107
TC count per hello  :0
STP Converge Mode   :Normal
Share region-configuration :Enabled
Time since last TC  :0 days 1h:16m:17s
Number of TC        :9
Last TC occurred    :GigabitEthernet0/0/2

Изменим приоритет коммутатора HUAWEI. Сделаем его наименьшим: 4096.

[Quidway]stp priority 4096

Посмотрим, что порт разблокировался:

[Quidway]disp stp brief
 MSTID  Port                        Role  STP State     Protection
   0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE
   0    GigabitEthernet0/0/2        DESI  FORWARDING      NONE
[Quidway]

Общая информация об STP:

[Quidway]disp stp
-------[CIST Global Info][Mode STP]-------
CIST Bridge         :4096 .781d-baa4-b6a7
Config Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
Active Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
CIST Root/ERPC      :4096 .781d-baa4-b6a7 / 0
CIST RegRoot/IRPC   :4096 .781d-baa4-b6a7 / 0
CIST RootPortId     :0.0
BPDU-Protection     :Disabled
TC or TCN received  :123
TC count per hello  :0
STP Converge Mode   :Normal
Share region-configuration :Enabled
Time since last TC  :0 days 0h:0m:44s
Number of TC        :11
Last TC occurred    :GigabitEthernet0/0/1

Официальный сайт сборок huawei modem – инструкция по настройке модема с помощью at-команд

Управление 3G-модемом происходит при помощи AT-команд. Даже родное программное обеспечение от оператора использует эти команды в фоновом режиме. Все вы прекрасно знаете, что при подключении модема к компьютеру, система определяет сразу несколько устройств: модем, CD-ROM, Flash-карта (не во всех модемах). Все эти интерфейсы виртуальны и используется пользователем по мере надобности. Иногда возникает необходимость отключить Cd-rom и флешку, например, не все роутеры исправно работают с модемами у которых эти опции включены. Иногда требуется включить режим только модем. Для этого потребуется программа Hyper terminal, встроенная в операционную систему Windows XP. Для Windows Vista и Windows 7 её необходимо скачать. Я предлагаю вам более удобный вариант для общения с модемом – программу Huawei Modem Terminal.
Вставляем модем Huawei в USB-порт и запускаем программу. Далее в программе вверху выбираем ваше устройство “HUAWEI Mobile Connect – 3G PC UI Interface” и жмем Connect. После этого требуется проверить отвечает ли нам модем. Для этого внизу в строке введите команду AT и нажмите Enter. Должно появиться что-то типа того:
Send: AT
Recieve: AT
Recieve: OK
Если все произошло именно так, то модем отвечает и мы можем подавать ему команды, список которых приведен ниже:

Команды для модемов типа Huawei E1550:
AT^U2DIAG=0 (девайс в режиме только модем)
AT^U2DIAG=1 (девайс в режиме модем CD-ROM)
AT^U2DIAG=255 (девайс в режиме модем CD-ROM Card Reader) – не поддерживается Huawei E1750
AT^U2DIAG=256 (девайс в режиме модем Card Reader, можно использывать как обычную флешку, отказавшись от установки драйверов модема).
AT^SYSCFG=2,2,3fffffff,0,2 (включение 2G,3G)

Команды для модема Huawei E1750:
AT^U2DIAG=0 (девайс в режиме только модем)
AT^U2DIAG=1 (девайс в режиме модем CD-ROM)
AT^U2DIAG=6 (девайс в режиме только сетевая карта)
AT^U2DIAG=268 для E1750 (девайс в режиме модем CD-ROM Card Reader)
AT^U2DIAG=276 для E1750 (девайс в режиме сетевой карты CD-ROM Card Reader)
AT^U2DIAG=256 (девайс в режиме модем Card Reader), можно использовать как обычную флешку, отказавшись от установки драйверов модема.

Команды для модемов Huawei E367, E352, E392, E353 и E171:
AT^SETPORT?  – Отображение текущей конфигурации
AT^GETPORTMODE  – Отображение в настоящее время активный режим
AT^SETPORT=”A1,A2;1,2,3,7,A1,A2″  – Установить конфигурацию по умолчанию
AT^SETPORT=”A1,A2;1,16,3,2,A1,A2″  – Установить конфигурацию по умолчанию для модема E171 (новая ревизия)
AT^SETPORT=”A1,A2;1,2,3,7,A1,A2,4,5,6,A,B,D,E” – Тоже сброс по умолчанию (на некоторых модемах)
AT^SETPORT=”A1,A2;1,2,3,7″  – Отключить CD-ROM и карту памяти
AT^SETPORT=”A1,A2;1,2,3,A2″  – Отключает NDIS и CD-ROM – остаётся только модем и флешка
AT^SETPORT=”A1,A2;1,2,3″  – Режим “Только модем”
AT^SETPORT=”A1;1,2″  – Отключает вообще всё кроме модема и служебного интерфейса
AT^SETPORT=”A1,A2;2,7″  – Отключить CD-ROM карту памяти модем  установить в Win7 только NDIS режим.
AT^SETPORT=”A1;2,7″  – CD-ROM NDIS

Команды для модема Huawei E369:
AT^SETPORT? – вывод на экран текущей конфигурации.
AT^GETPORTMODE – вывод на экран активного режима в настоящее время.
AT^SETPORT = “A1, A2, 1,2,3,7, A1, A2” – установка конфигурации по умолчанию.
AT^SETPORT = “A1, A2, 1,2,3,7” – устройство в режиме Modem Network Card.
AT^SETPORT=”A1,A2;1,2,3,A2″ – устройство в режиме Modem Card Reader.
AT^SETPORT = “A1, A2, 2,7” – устройство в режиме Network Card.
AT^SETPORT=”A1,A2;1,2,3″ – устройство в режиме Modem (работает быстрее и стабильнее).
AT^SETPORT = “A1, 2,7” – Network Card CD-ROM.
AT^SETPORT = “A1, A2, 1,2,3,7, A1, A2, 4,5,6, A, B, D, E” – сброс настроек по умолчанию.

Команды для модема Huawei E3131:
AT^SETPORT=”A1,A2;1,16,3,2,A1,A2″ – (Установить конфигурацию по умолчанию)
AT^SETPORT=”A1,A2;1,2,3,16,A1,A2″ – (режим для работы модема с Android 4.0 (иногда работает))
AT^SETPORT=”A1,A2;1,16,3,2″ – (девайс в режиме “модем сетевая карта”)
AT^SETPORT=”A1,A2;1,2,3,A2″ – (девайс в режиме “модем Card Reader”)
AT^SETPORT=”A1,A2;1,2,3,A1″ – (девайс в режиме “модем CD-ROM”)
AT^SETPORT=”A1,A2;1,2,3″ – (девайс в режиме “только модем”)
AT^SETPORT=”A1,A2;2,16″ – (девайс в режиме “сетевая карта”)
AT^SETPORT=”A1,A2;2,16,A1″ – (девайс в режиме “сетевая карта CD-ROM”)

Команды для модема Huawei E3272:
AT^SETPORT=”A1,A2;10,12,16,A1,A2″ – Конфигурация по умолчанию
AT^SETPORT=”A1,A2;10,12,16,A2″ – Конфигурация по умолчанию, отключить CD
AT^SETPORT=”A1,A2;10,12,16″ – Конфигурация по умолчанию, отключить CD SD
AT^SETPORT=”A1,A2;10,12″ – Конфигурация по умолчанию, отключить NDIS CD SD
AT^SETPORT=”A1;10,12,13,14,16,A1,A2″ – Включает: все COM порты NDIS CD SD
AT^SETPORT=”A1;10,12,13,14″ – Включает: все COM порты, отключает: NDIS CD SD
AT^SETPORT=”A1;10,12,13,14,16″ – Включает: все COM порты NDIS, отключает: CD SD
AT^SETPORT=”A1;10,12,13,14,A2″ – Включает: все COM порты SD, отключает: NDIS CD

Команды для активации предпочтительных режимов сети (для E1750, E1820, E1550 и похожим моделей):
at^hspa=0 – режим wcdma
at^hspa=1 – режим hsdpa
at^hspa=2 – режим hspa
at^hspa=3 – режим hspa
at^hspa=4 – сбалансированный режим. На некоторых форумах пишут, что кое-какие виды модемов с таким параметром лучше держут соединение.
Если на предыдущие команды появилось ERROR, то стоит попровать эти:
AT^HSDPA=1 – режим HSDPA
AT^HSDPA=0 – выключено
AT^HSUPA=1 – режим HSUPA
AT^HSUPA=0 – выключено
Внимание! Команды для активации предпочтительных режимов сети сбрасываются после отключения модема от питания.

Команды для разблокировки 3G-модема от конкретного оператора:
AT^CARDUNLOCK=»nck md5 hash»  – Сброс попыток к 10
AT^CARDLOCK=»nck code»  – Снятие блокировки
AT^CARDLOCK?  – Проверить блокировку и количество попыток в ответ модем выдаст:
CARDLOCK: A,B,0
A ->  2- означает, что симлока нет, 1-если модем залочен
B ->  количество оставшихся попыток разблокировки. У нового модема = 10

Обсуждение AT-команд на форуме, в теме: Настройка модема с помощью AT-команд

Подводные камни

В политике Google Play есть замечание:

“Any existing app that is currently using an alternative billing system will need to remove it to comply with this update. For those apps, we are offering an extended grace period until September 30, 2021 to make any required changes. New apps submitted after January 20, 2021 will need to be in compliance.”

Что это значит для нас? Теперь, если приложение одновременно поддерживает HMS и GMS сервисы, и в нем есть In-App Purchases, то Google Play не допустит его публикации, а существующим приложениям придется удалить этот функционал.В итоге, если был выбран первый способ конвертации (Add HMS API), мы имеем:

Решение: Более привлекательным вариантом кажется второй способ конвертации — простая замена GMS APIs на HMS APIs. Но вместе с этим используем product flavors, чтобы получать сборки приложения отдельно для Google Play и AppGallery.

Публикуем приложение в appgallery

После внедрения сервисов и успешного тестирования приложения, мы готовы публиковаться в AppGallery.

1.Переходим в AppGallery Connect и заполняем данные:

2.Грузим иконку приложения и скриншоты. Есть возможность прикрепить видео.

3.Указываем страны/регионы для публикации и грузим APK приложения. Кроме того, нужно загрузить подпись приложения.

4.Отмечаем способ покупок в приложении и рейтинг.

5.Грузим политику конфиденциальности (обязательно) и предоставляем данные тестового аккаунта, если это необходимо. Указываем дату публикации.

6.Нажимаем кнопочку “Отправить на проверку” и ждем! Проверка по регламенту занимает около 3-5 дней.

Режимы работы портов


Собственно, ничего нового. Существуют два основных режима работы порта: access и trunk.

Режим trunk

Настройка порта:

С чего начать?

Чтобы взаимодействовать с Huawei-системой, нужно завести Huawei ID. Это аналог google-аккаунта, с помощью которого предоставляется доступ к сервисам системы. Далее нужно зарегистрировать аккаунт разработчика: индивидуальный или корпоративный.

Ждем одобрения аккаунта. За 1-2 дня Huawei обещают проверить наши данные. После этого можно подключать приложение к HMS. Для этого заходим в консоль AppGallery Connect.

  1. Создаем проект, а в нем добавляем приложение

Обращаем внимание, что для приложения, в котором используются HMS, название пакета должно оканчиваться на “.huawei”.

2.Помещаем конфигурационный файл agconnect-services.json в корневую папку приложения. Также сохраняем хэш SHA-256. Он потребуется для аутентификации приложения, когда оно попытается получить доступ к службам HMS Core.

Примечание. Для того, чтобы получить SHA-256, можно выполнить команду в терминале, подставив необходимые данные из вашего keystore:

keytool -list -v -keystore <keystore path> -alias <key alias> -storepass <store password> -keypass <key password>

Для работы некоторых сервисов нужно указать место хранения данных:

3.Добавляем зависимости в проект Android Studio.В build.gradle на уровне проекта:

Создание vlan


Для создания vlan как сущности, на коммутаторе в режиме system-view выполняется команда vlan XXX, где XXX – номер vlan.

Статическая маршрутизация

Статические маршруты прописываются точно так же, как на оборудовании Cisco:

[Quidway]ip route 0.0.0.0 0.0.0.0 1.1.1.1

Просмотр таблицы маршрутизации:

[Quidway]disp ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
         Destinations : 6        Routes : 6

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        2.2.2.0/24  Direct  0    0           D   2.2.2.2         Vlanif1
        2.2.2.2/32  Direct  0    0           D   127.0.0.1       Vlanif1
       10.0.0.3/32  Direct  0    0           D   127.0.0.1       LoopBack0
       90.0.0.1/32  Direct  0    0           D   127.0.0.1       LoopBack10
      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0

На этом всё.Если уважаемое сообщество заинтересуется материалом, планирую продолжить освещать настройку оборудования HUAWEI. В следующей статье рассмотрим настройку динамической маршрутизации.

Спасибо за внимание.

Тестируем и отлаживаем приложение

После того, как мы внедрили Huawei сервисы в приложение, нам нужно протестировать его работоспособность.

У Huawei есть облачная платформа DigiX Lab, в которой представлены 2 сервиса.

С помощью сервиса облачного тестирования проверяем совместимость, стабильность, производительность и энергопотребление приложения на удаленных устройствах Huawei. Краткое описание тестов можно увидеть на картинке.

По окончании каждого теста доступен подробный отчет. Можно узнать о сбоях, ANR, утечках ресурсов, также увидеть загрузку процессора, использование памяти и многое другое. Плюсом будут доступны скриншоты, которые снимаются во время тестирования и журналы Logcat.

Тесты можно запускать либо с помощью плагина в Android Studio:

Либо в консоли AppGallery, выгрузив туда свой APK:

Служба облачной отладки решает проблему отсутствия реальных устройств Huawei. Предоставляется список удаленных устройств, а разовый сеанс работы до 2 часов. Сервис дает 24 часа работы бесплатно после подтверждения личности. Можно подавать заявки на продление срока действия неограниченное количество раз. Отладка также доступна из Android Studio и консоли.

Итоги

Huawei выстроили удобный процесс адаптации приложения под свои сервисы. Максимально безболезненный переход к HMS, тестирование и отладка на удаленных устройствах, а также знакомый процесс публикации приложения значительно облегчат жизнь разработчику.

Оцените статью
Huawei Devices
Добавить комментарий