Xav*_*ier 16 android android-gradle-plugin aar
我正在使用gradle构建的应用程序中导入一个android库,如下所示:
dependencies {
compile 'com.example:great-lib:0.1-SNAPSHOT'
}
Run Code Online (Sandbox Code Playgroud)
此库仅包含要在webview中使用的资源,js,css和图像,其布局如下:
assets/
|-> great.css
|-> great.min.js
|-> great.min.js.map
|-> js/
| |-> plop.js
| |-> foo.js
| ...
|-> img/
| ...
Run Code Online (Sandbox Code Playgroud)
该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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法是否有可能实现,如果是,如何?
(我也想过发布两个版本的库(great-lib和great-lib-debug),并且依赖于debugCompile和releaseCompile,但是我更愿意避免这种情况并发布一个版本)
Aar*_*ron 16
我用这种方法取得了成功:
android {
?
applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
variant.mergeAssetsProvider.configure {
doLast {
delete(fileTree(dir: outputDir, includes: ['**/js', '**/*.js.map']))
}
}
}
}
?
}
Run Code Online (Sandbox Code Playgroud)
这应该解决@ Xavier答案的问题:
TaskProvider任务的一部分完成的,因此删除会反映在任务的输出中,并且最新的检查应该不受影响.mergeAssets名称选择的,这比匹配整个变体名称要少(尽管它仍然是字符串类型).请注意,此方法也适用于buildType文件而不是res:只需替换assets为mergeAssets.
其他答案提到mergeResources并packagingOptions正在咆哮错误的树,因为它们的范围是所有变体(它们在aaptOptions范围中定义,而不是android或buildType).
Xav*_*ier 11
我最后做了以下事情:
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
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但有一些我不喜欢的事情:
finalizedBy),因此它与"最新"检查不兼容.但它只适用于发布版本,我更经常地进行调试小智 7
Gradle 提供“aaptOptions, ignoreAssetsPattern”来过滤/排除发布或调试版本中的资产文件夹和文件。
调试构建示例(js文件夹和great.css文件):
debug {
aaptOptions {
ignoreAssetsPattern '!js:!great.css:'
}
}
Run Code Online (Sandbox Code Playgroud)
发布版本示例(js文件夹和great.css文件):
release {
aaptOptions {
ignoreAssetsPattern '!js:!great.css:'
}
}
Run Code Online (Sandbox Code Playgroud)