React Native Android:如何用Gradle/Groovy将文件打包进APK
安卓端迁移文件打包实现方案(React Native项目)
实现步骤
1. 创建独立的Gradle脚本文件
在项目的android目录下新建copyMigrations.gradle文件,写入以下代码:
// 定义复制迁移文件的任务 task copyMigrationsToAssets(type: Copy) { // 源目录:项目根目录下的migrations文件夹 from "${rootProject.projectDir}/migrations" // 目标目录:app模块的assets/migrations文件夹(自动创建不存在的目录) into "${project.projectDir}/src/main/assets/migrations" // 只复制.sql后缀的迁移文件(可选,按需调整) include "*.sql" // 打印日志,方便排查 doLast { println "✅ 迁移文件已成功复制到APK资源目录" } } // 将复制任务绑定到编译流程:确保在资源处理前执行,保证文件被打包进APK preBuild.dependsOn copyMigrationsToAssets
2. 在App模块的build.gradle中引入脚本
打开android/app/build.gradle,在文件开头(或plugins块之后)添加以下代码:
// 引入迁移文件复制脚本 apply from: '../copyMigrations.gradle'
关键说明
- 路径对应关系:脚本中
rootProject.projectDir指向项目根目录,确保能正确找到根目录下的migrations文件夹;目标路径src/main/assets/migrations是安卓资源目录,编译时会自动打包进APK的assets目录。 - 编译流程钩子:通过
preBuild.dependsOn将复制任务绑定到预构建阶段,保证在资源编译、APK打包前完成文件复制,符合你要求的「签名前完成操作」的逻辑。 - 运行时访问:App启动后,可通过安卓的
AssetManager访问这些文件,示例代码(Kotlin):
val assetManager = context.assets val migrationFiles = assetManager.list("migrations") ?: emptyArray() migrationFiles.forEach { fileName -> assetManager.open("migrations/$fileName").use { inputStream -> // 读取文件内容并执行迁移逻辑 } }
与iOS脚本的等价性
该实现和你提供的iOS bash脚本逻辑完全对应:
- 源路径:项目根目录的
migrations文件夹 - 目标路径:安卓的资源目录(对应iOS的
UNLOCALIZED_RESOURCES_FOLDER_PATH) - 自动创建目标目录(Gradle的Copy任务会自动生成不存在的目录)
- 完成后打印成功日志
内容的提问来源于stack exchange,提问作者Oscar Franco
相关产品推荐
相关产品推荐

