Изменение конфигурации плагина Astromkey Android Gradle в зависимости от структуры проекта

Материал из Документация Ключ-АСТРОМ

Плагин astromkey для Android Gradle сканирует все подпроекты и настраивает процесс автоматического инструментирования для модулей вашего приложения. Плагин не влияет на большинство других модулей, и в некоторых случаях, например, в библиотечных модулях Android, вам может потребоваться настроить процесс инструментирования.

В следующем разделе описывается поведение подключаемого модуля для определенных типов модулей и архитектур.

Модули библиотеки Android

Все библиотеки Android/Java (и сторонние библиотеки) автоматически настраиваются, когда они являются частью вашего приложения Android. Никакой дополнительной настройки не требуется, поскольку плагин имеет доступ ко всем зависимостям Gradle вашего проекта Android-приложения. Если вы хотите обогатить данные о взаимодействии с мобильными пользователями, созданные модулями вашей библиотеки, добавьте ЕдиныйАгент SDK вручную в качестве зависимости Gradle.

Примечание . Вы должны использовать одну и ту же версию для ЕдиногоАгента SDK и подключаемого модуля astromkey для Android Gradle. Рекомендуется указать зависимость ЕдиногоАгента SDK через подключаемый модуль astromkey Android Gradle.

Если у вас есть несколько библиотечных проектов в многомодульном проекте и вы хотите использовать ЕдиныйАгент SDK в каждом библиотечном модуле, используйте следующий фрагмент кода Gradle:

Groovy:

subprojects {
    pluginManager.withPlugin("com.android.library") {
        dependencies {
            implementation com.astromkey.tools.android.astromkeyPlugin.agentDependency()
        }
    }
}

Kotlin:

subprojects {
    pluginManager.withPlugin("com.android.library") {
        dependencies {
            "implementation"(com.astromkey.tools.android.astromkeyPlugin.agentDependency())
        }
    }
}

Вы также можете использовать другие функции Gradle для тонкой настройки этого поведения. Например, следующие фрагменты кода Gradle используют имя модуля, чтобы определить, нужно ли добавлять ЕдиныйАгент SDK в определенный модуль библиотеки Android:

Groovy:

subprojects { project ->
    pluginManager.withPlugin("com.android.library") {
        if(project.name == 'firstLibrary' || project.name == 'secondLibrary') {
            dependencies {
                implementation com.astromkey.tools.android.astromkeyPlugin.agentDependency()
            }
        }
    }
}

Kotlin:

subprojects { project ->
    pluginManager.withPlugin("com.android.library") {
        if(project.name == "firstLibrary" || project.name == "secondLibrary") {
            dependencies {
                "implementation"(com.astromkey.tools.android.astromkeyPlugin.agentDependency())
            }
        }
    }
}

Android-проекты с динамической функциональной архитектурой

Плагин Android Gradle поддерживает доставку функций Play . Приложения могут состоять из базового модуля и одного или нескольких модулей динамических функций. Модули динамических функций можно загружать по запросу или даже в виде отдельной мгновенной функции без необходимости установки всего приложения.

Базовый модуль применяет com.android.applicationподключаемый модуль, тогда как модули динамических функций применяют com.android.dynamic-featureподключаемый модуль. Когда вы создаете приложение, плагин автоматически использует оба типа плагинов. Для всех модулей используется одна и та же конфигурация. Благодаря функции автозапуска плагин обрабатывает Applicationкласс базового модуля. Это гарантирует, что агент всегда работает, даже если динамическая функция работает в мгновенном режиме.

Мгновенная доставка и запуск вручную

Если вы хотите деактивировать функцию автоматического запуска внедрения и запустить агент вручную в своем коде, помните о том, что это может повлиять на модули динамических функций с мгновенным включением. Модули с поддержкой Instant предназначены для работы на устройстве без установки. Это означает, что на устройство поставляются только базовый модуль и динамический функциональный модуль с мгновенной активацией. Чтобы агент функционировал должным образом, он должен быть запущен в базовом модуле, желательно в Applicationклассе базового модуля, а не в классе или методе, который не вызывается вовремя мгновенным модулем.

Инструментирование вариантов сборки Android

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

Проекты Android с несколькими модулями приложений

Настройка подключаемого модуля astromkey Android Gradle для проектов Android с несколькими модулями приложений аналогична настройке проекта Android с одним модулем приложения. Следуйте инструкциям в Инструментарий с помощью плагина astromkey для Android Gradle .

Примечание . Убедитесь, что вы пропустили шаг 3: примените подключаемый модуль astromkey Android Gradle и добавьте фрагмент конфигурации .

Вместо применения com.astromkey.instrumentationидентификатора подключаемого модуля к файлу верхнего уровня build.gradleпримените идентификатор подключаемого модуля com.astromkey.instrumentation.module к build.gradleкаждому модулю приложения .

Groovy:

apply plugin: 'com.astromkey.instrumentation.module'
astromkey {
    configurations {
        sampleConfig {
            autoStart {
                applicationId '<YourApplicationID>'
                beaconUrl '<ProvidedBeaconURL>'
            }
        }
    }
}

Kotlin:

apply(plugin = "com.astromkey.instrumentation.module")
configure<com.astromkey.tools.android.dsl.astromkeyExtension> {
    configurations {
        create("sampleConfig") {
            autoStart {
                applicationId("<YourApplicationID>")
                beaconUrl("<ProvidedBeaconURL>")
            }
        }
    }
}

Чтобы настроить инструменты для конкретного приложения, вы должны изменить конфигурацию плагина в build.gradleфайле приложения. Это изменение конфигурации не повлияет на другие модули приложения.

Проекты Android с несколькими приложениями и модулями динамических функций

Если проект Android также содержит модули, использующие подключаемый com.android.dynamic-featureмодуль, рекомендуется скопировать приведенный выше фрагмент в новый .gradleфайл. Сгенерированный файл необходимо применить в модуле приложения и во всех модулях динамических функций, принадлежащих этому модулю приложения. Чтобы применить .gradleфайл, используйте следующий фрагмент, как описано в официальной документации Gradle :

Groovy:

apply from: 'other.gradle'

Kotlin:

apply(from = "other.gradle.kts")

При таком подходе для всех модулей, принадлежащих одному и тому же приложению, используется одна и та же конфигурация.

Примечание . Невозможно использовать разные конфигурации для одного и того же модуля динамических функций (если он принадлежит нескольким приложениям).

Проекты Android только с одним файлом сборки

Если ваш проект Android не использует рекомендованную архитектуру и состоит только из одного файла build.gradle, этапы инструментирования немного отличаются. В этом случае и «файл сборки верхнего уровня», и «файл сборки уровня модуля» относятся к одному и тому же build.gradleфайлу.

Выполните все шаги, как описано в разделе «Инструментирование с помощью подключаемого модуля astromkey Android Gradle» , кроме шага 3: примените подключаемый модуль astromkey Android Gradle и добавьте фрагмент конфигурации . Вместо того, чтобы применять com.astromkey.instrumentationидентификатор плагина в build.gradleфайле, примените com.astromkey.instrumentation.moduleидентификатор плагина. Также убедитесь, что com.astromkey.instrumentation.moduleприменяется после com.android.applicationплагина и перед com.google.firebase.firebase-perfплагином, если он также используется.

Плагин Firebase Performance Monitoring версии 1.4.0+, используемый с плагином Android Gradle версии 4.2.0, несовместим с плагином astromkey Android Gradle.

Groovy:

apply plugin: 'com.android.application'
...
apply plugin: 'com.astromkey.instrumentation.module'

astromkey {
    configurations {
        sampleConfig {
            autoStart {
                applicationId '<YourApplicationID>'
                beaconUrl '<ProvidedBeaconURL>'
            }
        }
    }
}

Kotlin:

apply(plugin = "com.android.application")
...
apply(plugin = "com.astromkey.instrumentation.module")

configure<com.astromkey.tools.android.dsl.astromkeyExtension> {
    configurations {
        create("sampleConfig") {
            autoStart {
                applicationId("<YourApplicationID>")
                beaconUrl("<ProvidedBeaconURL>")
            }
        }
    }
}