如何在 Android gradle 构建期间生成临时文件并从应用程序访问它们

How to generate temporary files during Android gradle build and access them from the app

提问人:rysv 提问时间:5/29/2023 更新时间:5/29/2023 访问量:60

问:

我在构建过程中生成了一些数据文件(使用自定义 Gradle 插件),我想在 Android 库中访问(即包含在使用此库的 apk 文件中),并且还想确保它们不会显示为 git 中添加的文件。这些文件不应是存储库的一部分,应在生成完成后删除。

我可以生成这些文件并使用src/main/assets

context.assets.open(filename)

但是,这些文件会作为副作用而保留下来。将它们从 gradle 插件中删除(在构建完成后)对我来说似乎并不容易。

是否可以在目录下生成这些文件,以便我可以使用上下文(由应用程序传递)从库中访问它们,但也不会显示为添加的文件。buildgit status

以下是插件代码:

import org.gradle.api.Task
import org.gradle.api.execution.TaskExecutionListener
import org.gradle.api.tasks.TaskState

import java.util.regex.Matcher
import java.util.regex.Pattern 

class BuildEventsListener implements TaskExecutionListener {

    @Override
    void beforeExecute(Task task) {
    }

    @Override
    void afterExecute(Task task, TaskState taskState) {
        boolean isApp = task.project.plugins.hasPlugin("com.android.application")
        if (!isApp) {
            return
        }
        String taskname = task.name
        Pattern pattern = (taskname.contains("assemble")) ? Pattern.compile("assemble(\\w*)(Release|Debug)\$")
                : Pattern.compile("generate(\\w*)(Release|Debug)\$")
        Matcher matcher = pattern.matcher(taskname)
        if (matcher.find() && task.hasProperty("project")) {
            getData(task.project)
        }
    }

    void getData(Project project) {
        String projectDir = project.projectDir.name
        String jsonPath = "${projectDir}/src/main/assets/data.json"
        BufferedWriter writer = new BufferedWriter(new FileWriter(jsonPath))
        writer.write("{")
        // write ...
        writer.write("}")
        writer.close()
    }
}
安卓 gradle android-gradle-7.0

评论


答: 暂无答案