在Gloon中自定义AndroidManifest.xml



如果我没有在Gloon项目中创建src/android/AndroidManifest.xml文件,那么mvn-gluonfx:package命令会为我创建一个带有一些相对合理默认值的文件。然而,我需要对我的应用程序生成的AndroidManifest.xml进行一些更改(例如表示支持多屏幕分辨率,并且我需要添加计费权限(。

如果我在gluonfx:package期间按照建议将生成的AndroidManifest.xml复制到src/android/AndroidManifest.xml,那么Gloon就不再为我更新版本代码和版本名称字段。我也不确定手动编辑AndroidManiifet.xml文件是否有任何其他副作用。

所以我的问题是:

  1. 在管理Gloon项目的AndroidManifest.xml时,最佳实践是什么
  2. 作为CI/CD管道的一部分,人们如何处理在手动编辑的文件中更新版本代码和版本名称的问题,我不想为每个构建手动编辑AndroidManifest.xml
  3. 在gluonfx:package命令之外管理AndroidManifest.xml有什么陷阱吗

如本文所述,您应该使用<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,请查看HelloGloon 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>
<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 }}
...

最新更新