我的应用程序源文件夹中有一大堆文件需要打包到我的应用程序Bundle 包中.不幸的是,我是Gradle/Groovy新手.我的 idea 是修改build.gradle应用程序,运行一个额外的Gradle文件,该文件将挂钩到编译过程中,并在APK签名之前添加这个文件.

例如,哨兵如何做到这一点:

理想情况下,我想用类似于(伪代码)的东西来复制:

task copyFolder(path) {
  // copy the files from a `src` folder into the apps apk
}

preBuild.depends(copyFolder)

编辑:更详细的解释

这是一个React Native应用程序,所以事情可能与常规Android应用程序不同,但这里有一个更详细的解释.我的应用程序的文件夹看起来像这样:

android // the Android app folder
src // contains JS source files
migrations
  migration1.sql
  migration2.sql

我需要将此迁移SQL打包到最终的APK中,以便稍后可以在应用程序启动时在运行时进行访问.

作为iOS的一个参考点,我通过添加一个构建脚本来自动化这个过程,该脚本只是调用一个bash脚本,看起来像这样:

#!/bin/sh

echo "Copying prisma migration files..."

MIGRATIONS_TARGET=${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}

mkdir "$MIGRATIONS_TARGET/migrations"
cp -r ${SRCROOT}/../migrations ${MIGRATIONS_TARGET}

echo "migration files copied ✅"

所以我基本上是在寻找与之相当的东西.将文件移动到资源文件夹对我来说是行不通的.这需要在单个脚本中自动执行,该脚本与构建过程的某个步骤挂钩.

推荐答案

APK基本上是一个压缩存档,可以在其中添加任何文件.但是您将无法从您的应用程序中读取它们.为了访问它们,您必须使用resassests个目录.您可以使用此任务复制:

tasks.register('copyFolder', Copy) {
    from "${SRCROOT}/../migrations"
    into "src/main/assets/migrations"
}

preBuild.dependsOn(copyFolder)

然后将它们作为assets资源 进行访问

请注意,相对路径根是Gradle项目的模块的根目录,而不是Reaction项目的根目录.

Android相关问答推荐

如何让用户与我的应用生成的多个音频文件交互

有没有办法知道每台安卓设备上的通知限制?

Android Compose Pages 3-一次加载所有页面,无需在LazyColumn中滚动,无需网络调用和内部滚动

无法将非静态方法与Frida挂钩

(已解决)从最近的应用程序打开应用程序时出错

如何检测低性能 Android 设备进行条件动画渲染?

Camera2 将图像从 ImageReader 传递到 MediaRecorder

升级到 Jetpack Compose 物料 list 2023.08.00 需要我将 targetSdk 更改为 34

从包含的(复合)模块导入 Kotlin 类时,Android 应用程序模块的 build.gradle.kts 未解决的引用错误

使用不同的gradle文件导入外部库

修复报错 RecyclerView: No adapter attached;跳过布局

当父布局的背景为浅色时,Android ProgressBar 背景 colored颜色 变为灰色

如何在一个活动中预加载图像然后在另一个活动中加载它们?

任务 ':app:checkReleaseDuplicateClasses' 执行失败

在事件中使用 Context/Toast 时不需要的重组 - Jetpack Compose

compose 更改列表元素但lazyColumn不更改

在 Kotlin 中打开新片段时如何对当前片段应用更改?

Jetpack Compose:SpanStyle 的 TextAlign(垂直居中)

CenterAlignedTopAppBar 滚动行为:未为参数状态传递值

如何让用户与任意应用程序共享文件?