Android项目Gradle配置:仅Release版本排除Assets目录指定文件求助
搞定Android Release变体专属排除Assets文件的问题
我来帮你解决这个困扰!你之前试的两种方法都有点小问题:aaptOptions是全局生效的,会把所有构建变体里的文件都排除;而variantFilter里的删除操作可能因为任务执行时机或者路径没写对,导致没起作用。试试下面这两种靠谱的配置:
方法一:在合并Assets任务后删除指定文件
这种方式适合需要动态处理文件的场景,能精准绑定到Release变体的构建流程:
android { applicationVariants.all { variant -> if (variant.buildType.name == 'release') { // 配置mergeAssets任务的后续操作 variant.mergeAssetsProvider.configure { doLast { // 如果你要删除的是src/main/assets下的filedir/file.json,就用这个路径 delete(file("${projectDir}/src/main/assets/filedir/file.json")) // 要是想删除构建后输出目录里的文件,就换成下面这句: // delete(file("${outputDir}/filedir/file.json")) } } } } }
方法二:直接在源集里排除文件(更简洁高效)
这个方法更直接,在资源合并阶段就跳过该文件,比事后删除更高效:
android { sourceSets { release { assets { // 这里写你要排除的文件相对路径,相对于assets目录 exclude 'filedir/file.json' } } } }
小提示
- 方法二的
exclude路径是相对于assets根目录的,比如如果文件在assets根目录下,直接写exclude 'file.json'就行 - 要是你的项目有多个flavor,还可以针对特定flavor+release的组合来配置,比如
releaseDebug之类的变体名称
你可以根据自己的项目需求选其中一种,亲测有效哦!
内容的提问来源于stack exchange,提问作者KKONG
相关产品推荐
相关产品推荐

