在 Gluon 中自定义 AndroidManifest.xml
Customizing AndroidManifest.xml in Gluon
如果我没有在我的 Gluon 项目中创建 src/android/AndroidManifest.xml 文件,那么 mvn gluonfx:package 命令会为我创建一个具有一些相对合理的默认值的文件。但是,我需要对我的应用程序生成的 AndroidManifest.xml 进行一些更改(例如指示支持多种屏幕分辨率,并且我需要添加 BILLING 权限)。
如果我按照 gluonfx:package 期间的建议将生成的 AndroidManifest.xml 复制到 src/android/AndroidManifest.xml,则 Gluon 不再为我更新版本代码和版本名称字段.我也不确定手动编辑 AndroidManifest.xml 文件是否有任何其他副作用。
所以我的问题是:
- 管理 AndroidManifest.xml Gluon 项目的最佳实践是什么?
- 人们如何处理更新手动编辑文件中的版本代码和版本名称作为 CI/CD 管道的一部分,我不想手动编辑 AndroidManifest.xml每个版本?
- 在 gluonfx:package 命令之外管理 AndroidManifest.xml 是否有任何陷阱?
如 here 所述,您应该使用 <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
中生成的清单),以便 add/modify 的一部分,无论何时在 pom 中更改它们,它都会针对这三个值进行更新。
关于 CI/CD,请查看 HelloGluon CI 示例。
它没有自定义清单,但它展示了如何在 CI 环境中处理 ReleaseConfiguration
和更新发布值。
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定义的:
<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 job时,需要使用的变量和秘密:
- name: Gluon Build
run: mvn -Pandroid gluonfx:build gluonfx:package
env:
GLUON_ANDROID_KEYSTOREPATH: ${{ steps.android_keystore_file.outputs.filePath }}
...
如果我没有在我的 Gluon 项目中创建 src/android/AndroidManifest.xml 文件,那么 mvn gluonfx:package 命令会为我创建一个具有一些相对合理的默认值的文件。但是,我需要对我的应用程序生成的 AndroidManifest.xml 进行一些更改(例如指示支持多种屏幕分辨率,并且我需要添加 BILLING 权限)。
如果我按照 gluonfx:package 期间的建议将生成的 AndroidManifest.xml 复制到 src/android/AndroidManifest.xml,则 Gluon 不再为我更新版本代码和版本名称字段.我也不确定手动编辑 AndroidManifest.xml 文件是否有任何其他副作用。
所以我的问题是:
- 管理 AndroidManifest.xml Gluon 项目的最佳实践是什么?
- 人们如何处理更新手动编辑文件中的版本代码和版本名称作为 CI/CD 管道的一部分,我不想手动编辑 AndroidManifest.xml每个版本?
- 在 gluonfx:package 命令之外管理 AndroidManifest.xml 是否有任何陷阱?
如 here 所述,您应该使用 <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
中生成的清单),以便 add/modify 的一部分,无论何时在 pom 中更改它们,它都会针对这三个值进行更新。
关于 CI/CD,请查看 HelloGluon CI 示例。
它没有自定义清单,但它展示了如何在 CI 环境中处理 ReleaseConfiguration
和更新发布值。
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定义的:
<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 job时,需要使用的变量和秘密:
- name: Gluon Build
run: mvn -Pandroid gluonfx:build gluonfx:package
env:
GLUON_ANDROID_KEYSTOREPATH: ${{ steps.android_keystore_file.outputs.filePath }}
...