fix(update): generate RN Android init metadata
这个提交包含在:
父节点
78721ee2f0
当前提交
144fd80f65
@ -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/,
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户