Android项目中是否存在Gradle与App代码均可访问的共享目录?
Android项目中Gradle与App代码共享目录方案
当然存在可以同时被Gradle构建脚本和App代码访问的目录,以下是几个常用方案及使用方式:
1. src/main/assets目录
- Gradle访问方式:通过
project.file("src/main/assets/目标文件名")获取文件对象,构建阶段可自由读写该目录下的文件。 - App代码访问方式:借助
AssetManager读取,示例代码:
注意:该目录下的文件会打包进APK,App运行时只能读取,无法直接写入。try (InputStream is = getAssets().open("目标文件名")) { // 处理文件内容 } catch (IOException e) { e.printStackTrace(); }
2. app/build下的自定义子目录
比如创建app/build/generated/shared_files目录,适合存放构建阶段生成的临时文件:
- Gradle访问方式:用
project.buildDir.resolve("generated/shared_files/目标文件名")定位,构建阶段可随意读写,且该目录默认不会被Git追踪(build目录通常在.gitignore中)。 - App代码访问方式:需要通过Gradle的
sourceSets将该目录映射为assets源目录,配置示例:
配置完成后,App代码即可通过android { sourceSets { main { assets.srcDirs += file("$buildDir/generated/shared_files") } } }AssetManager像访问普通assets文件一样读取该目录下的内容。
3. src/main/res/raw目录
- Gradle访问方式:通过
project.file("src/main/res/raw/目标文件名")操作文件,构建阶段支持读写。 - App代码访问方式:通过资源ID读取,示例代码:
该目录下的文件会被编译进APK,同样仅支持只读访问。try (InputStream is = getResources().openRawResource(R.raw.目标文件名)) { // 处理文件内容 } catch (IOException e) { e.printStackTrace(); }
额外注意事项
- 若需要App运行时可写入文件,Gradle构建阶段生成的文件只能作为"原始模板",需在App首次启动时将其复制到应用私有存储目录(如
getFilesDir()、getExternalFilesDir())后再进行写入操作。 - 尽量避免使用项目根目录下的自定义非标准目录,这类目录无法被App代码直接访问,需额外配置,徒增复杂度。
内容的提问来源于stack exchange,提问作者lannyf
相关产品推荐
相关产品推荐

