gpt4 book ai didi

android - 排除发布构建类型的 Assets

转载 作者:IT老高 更新时间:2023-10-28 23:30:48 28 4
gpt4 key购买 nike

我正在使用 gradle 构建的应用程序中导入一个 android 库,如下所示:

dependencies {
compile 'com.example:great-lib:0.1-SNAPSHOT'
}

此库仅包含要在 webview 中使用的 Assets 、js、css 和图像,布局如下:

assets/
|-> great.css
|-> great.min.js
|-> great.min.js.map
|-> js/
| |-> plop.js
| |-> foo.js
| ...
|-> img/
| ...

js 文件夹包含源文件(用于源映射)。我想在调试版本中包含它和 .map 文件,并且在发布版本中只有缩小的 js,但我找不到这样做的方法。

到目前为止,我已经尝试过:

android {
// this doesn't exclude anything
packageOptions {
exclude 'assets/js'
}
buildTypes {
release {
// this does exclude the js folder, but in both release and debug
aaptOptions {
ignoreAssetsPattern "!js"
}
}
}
}

知道我想要的是否可以实现,如果可以,如何实现?

(我也想过发布两个版本的库(great-libgreat-lib-debug),并且在中有依赖debugCompilereleaseCompile,但我宁愿避免这种情况并发布单个版本)

最佳答案

我在这种方法上取得了成功(2019 年 5 月 13 日更新了 TaskProvider 支持;请参阅旧版本的编辑历史记录):

android {

applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
variant.mergeAssetsProvider.configure {
doLast {
delete(fileTree(dir: outputDir, includes: ['**/js', '**/*.js.map']))
}
}
}
}

}

这应该解决@Xavier 回答的问题:

  • 删除是作为变体的 mergeAssets 任务的一部分完成的,因此删除会反射(reflect)在任务的输出中,并且不影响最新的检查。
  • 路径是在没有魔法字符串的情况下计算的。如果我的示例过于宽松,您可能需要调整包含模式。
  • 变体是由 buildType 名称选择的,这比匹配整个变体名称的问题要小(尽管它仍然是字符串类型)。

请注意,这种方法也适用于 res 文件而不是 assets:只需将 mergeAssets 替换为 mergeResources

其他提到 packagingOptionsaaptOptions 的答案是错误的,因为它们的范围是 all 变体(它们在android 范围,而不是 buildTypeproductFlavor)。

关于android - 排除发布构建类型的 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897450/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com