fix(update): generate RN Android init metadata
这个提交包含在:
父节点
78721ee2f0
当前提交
144fd80f65
@ -460,6 +460,8 @@ pnpm --dir packages/update test
|
||||
variant 都从宿主唯一 `src/assets/config/*.xuqmconfig` 生成
|
||||
`assets/config/config.xuqmconfig`。Metro Debug 不生成插件 Bundle;Release 或
|
||||
`USE_METRO=false` 才继续执行完整 Bundle/资源任务。
|
||||
- update 定向测试 46 项通过(CLI/打包 28,领域 18),Prettier 通过。尚需 Jenkins
|
||||
发布新的 update alpha,并在 App4 改用该 Nexus 版本后执行 Android Debug/Release
|
||||
宿主构建和模拟器日志复核。
|
||||
- 同一脚本为每个 Android variant 生成自动初始化、buildId 与 BugCollect 构建开关
|
||||
元数据。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.Internal
|
||||
import org.gradle.api.tasks.OutputDirectory
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.api.tasks.PathSensitive
|
||||
import org.gradle.api.tasks.PathSensitivity
|
||||
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")) {
|
||||
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 ->
|
||||
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(
|
||||
prepareXuqmConfig,
|
||||
{ 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_BUGCOLLECT_MODE", bugCollectMode\.get\(\)\)/)
|
||||
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(
|
||||
gradle,
|
||||
/variant\.sources\.assets\?\.addGeneratedSourceDirectory\(\s*prepareXuqmConfig/,
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户