问题描述
我正在使用 gradle 构建的应用程序中导入一个 android 库,如下所示:
I'm importing an android library in an application built with gradle, like that:
dependencies { compile 'com.example:great-lib:0.1-SNAPSHOT' }
此库仅包含要在 webview 中使用的资产、js、css 和图像,布局如下:
This library contains only assets, js, css and images to be used in a webview, with a layout like that:
assets/ |-> great.css |-> great.min.js |-> great.min.js.map |-> js/ | |-> plop.js | |-> foo.js | ... |-> img/ | ...
js 文件夹包含源文件(用于源映射).我想在调试版本中包含它和 .map 文件,并且在发布版本中只有缩小的 js,但我找不到这样做的方法.
The js folder contains source files (to be used with source maps). I would like to include it and the .map file for the debug builds, and have only the minified js in release builds, but I can't find a way to do that.
到目前为止,我已经尝试过:
So far I've tried :?
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" } } } }
知道我想要的是否可以实现,如果可以,如何实现?
Any idea if what I want is possible to achieve, and if so how?
(我也想过发布两个版本的库(great-lib和great-lib-debug),并且在中有依赖debugCompile 和 releaseCompile,但我宁愿避免这种情况并发布单个版本)
(I've also thought of publishing two versions of the library (great-lib and great-lib-debug), and have the dependency in debugCompile and releaseCompile, but I'd prefer avoiding that and publishing a single version)
推荐答案
我最终做了以下事情:
android.applicationVariants.all { variant -> if (variant.name.contains('Release')) { // exclude source and sourcemap from release builds def noJsSourceTask = task("delete${variant.name}JsSource", type: Delete) { delete "${buildDir}/intermediates/assets/${variant.dirName}/js" delete "${buildDir}/intermediates/assets/${variant.dirName}/great.min.js.map" } variant.mergeAssets.finalizedBy noCeJsSourceTask } }
它工作正常,但有几件事我不太喜欢:
It works ok, but there are a few things I don't really like:
- 我正在处理任务完成后生成的文件(finalizedBy),因此它不适用于最新"检查.但这仅适用于发布版本,我更频繁地进行调试
- 要删除的文件的路径是手动构建的.我不确定它是否足够通用,可以按原样在其他项目中重用
- 我根据它们的名称选择变体.我会喜欢更有条理的东西.
- I'm touching at the files produced by a task after it is done (the finalizedBy), so it doesn't work well with "up-to-date" checking. But it's only for release builds, I'm doing debug ones more often
- the path of the files to delete is manually built. I'm not sure if it's generic enough to be reused in other projects as-is
- I'm selecting the variants based on their name. I would have liked something more structured.