fix(update): generate RN Android init metadata

这个提交包含在:
XuqmGroup 2026-07-27 11:56:42 +08:00
父节点 78721ee2f0
当前提交 144fd80f65
共有 3 个文件被更改,包括 79 次插入3 次删除

查看文件

@ -460,6 +460,8 @@ pnpm --dir packages/update test
variant 都从宿主唯一 `src/assets/config/*.xuqmconfig` 生成 variant 都从宿主唯一 `src/assets/config/*.xuqmconfig` 生成
`assets/config/config.xuqmconfig`。Metro Debug 不生成插件 Bundle;Release 或 `assets/config/config.xuqmconfig`。Metro Debug 不生成插件 Bundle;Release 或
`USE_METRO=false` 才继续执行完整 Bundle/资源任务。 `USE_METRO=false` 才继续执行完整 Bundle/资源任务。
- update 定向测试 46 项通过CLI/打包 28,领域 18,Prettier 通过。尚需 Jenkins - 同一脚本为每个 Android variant 生成自动初始化、buildId 与 BugCollect 构建开关
发布新的 update alpha,并在 App4 改用该 Nexus 版本后执行 Android Debug/Release 元数据。RN 宿主无需额外应用 Android `com.xuqm.common` 插件;Debug 自动上报
宿主构建和模拟器日志复核。 保持关闭,Release 根据统一构建参数决定。
- `@xuqm/rn-update@0.5.0-alpha.15` 已由 Jenkins 发布。App4 的 Debug 构建已证明
签名配置进入 APK;本次元数据修复仍需发布下一 alpha 后完成模拟器日志复核。

查看文件

@ -10,6 +10,7 @@ import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.PathSensitive import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
@ -127,6 +128,45 @@ abstract class CopyXuqmConfigTask extends DefaultTask {
} }
} }
/**
* RN 宿 Android SDK Manifest
*
* RN 使宿 Android Gradle
* Android SDK RN 宿
*/
abstract class GenerateXuqmHostManifestTask extends DefaultTask {
@Input
abstract Property<String> getBuildId()
@Input
abstract Property<Boolean> getBugCollectBuildEnabled()
@Input
abstract Property<Boolean> getBugCollectAutomaticEnabled()
@OutputFile
abstract RegularFileProperty getOutputFile()
@TaskAction
void generate() {
def manifest = outputFile.get().asFile
manifest.parentFile.mkdirs()
manifest.setText(
"""<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<meta-data android:name="com.xuqm.common_plugin_applied" android:value="true" />
<meta-data android:name="com.xuqm.build_id" android:value="${buildId.get()}" />
<meta-data android:name="com.xuqm.bugcollect_build_enabled" android:value="${bugCollectBuildEnabled.get()}" />
<meta-data android:name="com.xuqm.bugcollect_automatic_enabled" android:value="${bugCollectAutomaticEnabled.get()}" />
</application>
</manifest>
""",
"UTF-8",
)
}
}
if (!plugins.hasPlugin("com.android.application")) { if (!plugins.hasPlugin("com.android.application")) {
throw new GradleException("xuqm-bundles.gradle must be applied to an Android application module") throw new GradleException("xuqm-bundles.gradle must be applied to an Android application module")
} }
@ -248,6 +288,31 @@ def prepareXuqmConfig = tasks.register(
} }
androidComponents.onVariants(androidComponents.selector().all()) { variant -> androidComponents.onVariants(androidComponents.selector().all()) { variant ->
def variantName = variant.name
def variantSuffix = variantName.substring(0, 1).toUpperCase(Locale.ROOT) +
variantName.substring(1)
def bugCollectEnabled = xuqmBugCollectMode.map { it != "disabled" }
def prepareXuqmHostManifest = tasks.register(
"prepareXuqmHostManifest${variantSuffix}",
GenerateXuqmHostManifestTask,
) {
group = "xuqm"
description = "Generates Xuqm initialization metadata for ${variantName}."
buildId.set(xuqmBuildId)
bugCollectBuildEnabled.set(bugCollectEnabled)
bugCollectAutomaticEnabled.set(
bugCollectEnabled.map { enabled -> enabled && variant.buildType == "release" },
)
outputFile.set(
layout.buildDirectory.file(
"generated/xuqm/${variantName}/AndroidManifest.xml",
),
)
}
variant.sources.manifests.addGeneratedManifestFile(
prepareXuqmHostManifest,
{ task -> task.outputFile },
)
variant.sources.assets?.addGeneratedSourceDirectory( variant.sources.assets?.addGeneratedSourceDirectory(
prepareXuqmConfig, prepareXuqmConfig,
{ task -> task.assetsOutputDirectory }, { task -> task.assetsOutputDirectory },

查看文件

@ -32,6 +32,15 @@ test('Gradle models and forwards the exact embedded release identity', () => {
assert.match(gradle, /environment\("XUQM_BUILD_ID", buildId\.get\(\)\)/) assert.match(gradle, /environment\("XUQM_BUILD_ID", buildId\.get\(\)\)/)
assert.match(gradle, /environment\("XUQM_BUGCOLLECT_MODE", bugCollectMode\.get\(\)\)/) assert.match(gradle, /environment\("XUQM_BUGCOLLECT_MODE", bugCollectMode\.get\(\)\)/)
assert.match(gradle, /abstract class CopyXuqmConfigTask extends DefaultTask/) assert.match(gradle, /abstract class CopyXuqmConfigTask extends DefaultTask/)
assert.match(gradle, /abstract class GenerateXuqmHostManifestTask extends DefaultTask/)
assert.match(gradle, /com\.xuqm\.common_plugin_applied/)
assert.match(gradle, /com\.xuqm\.build_id/)
assert.match(gradle, /com\.xuqm\.bugcollect_build_enabled/)
assert.match(gradle, /com\.xuqm\.bugcollect_automatic_enabled/)
assert.match(
gradle,
/variant\.sources\.manifests\.addGeneratedManifestFile\(\s*prepareXuqmHostManifest/,
)
assert.match( assert.match(
gradle, gradle,
/variant\.sources\.assets\?\.addGeneratedSourceDirectory\(\s*prepareXuqmConfig/, /variant\.sources\.assets\?\.addGeneratedSourceDirectory\(\s*prepareXuqmConfig/,