Настройка AndroidManifest.xml в Gluon
Если я не создам файл src/android/AndroidManifest.xml в своем проекте Gluon, то команда mvn gluonfx:package создаст его для меня с некоторыми относительно разумными значениями по умолчанию. Однако мне нужно внести некоторые изменения в сгенерированный файл AndroidManifest.xml для моего приложения (например, указать поддержку нескольких разрешений экрана и добавить разрешение BILLING).
Если я скопирую сгенерированный AndroidManifest.xml в src/android/AndroidManifest.xml, как было предложено во время gluonfx:package, то Gluon больше не будет обновлять для меня поля кода версии и имени версии. Я также не уверен, есть ли какие-либо другие побочные эффекты при ручном редактировании файла AndroidManifest.xml.
Итак, мои вопросы:
- Как лучше всего управлять AndroidManifest.xml для проекта Gluon?
- Как люди справляются с обновлением кода версии и имени версии в редактируемом вручную файле в рамках конвейера CI/CD, когда я не хочу вручную редактировать AndroidManifest.xml для каждой сборки?
- Есть ли подводные камни в управлении AndroidManifest.xml вне команды gluonfx:package?
1 ответ
Как описано здесь , вы должны использовать
<releaseConfiguration/>
для определения значений, которые требуются или должны быть обновлены для каждого нового выпуска.
Для Android, помимо свойств подписи хранилища ключей, вы также можете определить:
- код версии
- название версии
- ярлык приложения
как:
<plugin>
<groupId>com.gluonhq</groupId>
<artifactId>gluonfx-maven-plugin</artifactId>
<version>${gluonfx.maven.plugin.version}</version>
<configuration>
<target>${gluonfx.target}</target>
<releaseConfiguration>
<versionCode>2</versionCode>
<versionName>3.0</versionName>
<appLabel>MyHelloFX</appLabel>
</releaseConfiguration>
...
Поэтому, если вам нужно добавить AndroidManifest в
src/Android
(тот, который был создан в
target/gluonfx/aarch64-android/gensrc/android/AndroidManifest.xml
), чтобы добавить/изменить его часть, он всегда будет обновляться для этих трех значений всякий раз, когда вы меняете их в файле pom.
Что касается CI/CD, взгляните на пример HelloGluon CI .
У него нет пользовательского манифеста, но он показывает, как бороться с
ReleaseConfiguration
и обновление значений выпуска в среде CI.
pom определяет некоторые свойства, которые используются блоком releaseConfiguration :
<properties>
...
<main.class>com.gluonhq.hello.HelloGluonApp</main.class>
<app.identifier>${main.class}</app.identifier>
<app.description>The HelloGluon app</app.description>
<version.code/>
<provided.keystore.path/>
</properties>
...
<plugin>
<groupId>com.gluonhq</groupId>
<artifactId>gluonfx-maven-plugin</artifactId>
<version>${gluonfx.maven.plugin.version}</version>
<configuration>
...
<releaseConfiguration>
<vendor>Gluon</vendor>
<description>${app.description}</description>
<packageType>${package.type}</packageType>
<!-- for macOS/iOS -->
<macAppStore>${mac.app.store}</macAppStore>
<bundleShortVersion>${bundle.short.version}</bundleShortVersion>
<bundleVersion>${bundle.version}</bundleVersion>
<!-- for Android -->
<versionCode>${version.code}</versionCode>
<providedKeyStorePath>${provided.keystore.path}</providedKeyStorePath>
...
Эти свойства в конечном итоге определяются для каждого профиля :
<profile>
<id>android</id>
<properties>
<gluonfx.target>android</gluonfx.target>
<app.identifier>com.gluonhq.samples.hellogluon</app.identifier>
<version.code>${env.GITHUB_RUN_NUMBER}</version.code>
...
При запуске задания Android используются необходимые переменные и секреты:
- name: Gluon Build
run: mvn -Pandroid gluonfx:build gluonfx:package
env:
GLUON_ANDROID_KEYSTOREPATH: ${{ steps.android_keystore_file.outputs.filePath }}
...