请您知道在合并多个资产文件夹之前或合并期间如何从Android项目资产文件夹中排除某些文件的方法吗?
例如:
android {
sourceSets {
main {
assets.srcDirs = [fileTree(dir: 'assets1', exclude: 'myfile.txt'), 'assets2'] // does not work
assets.exclude 'assets1/myfile.txt' // does not work
assets.exclude '**/*.txt' // does not work
assets.exclude '*.txt' // does not work
}
}
packagingOptions {
exclude 'assets1/myfile.txt' // does not work
exclude '**/*.txt' // does not work
exclude '*.txt' // does not work either
}
aaptOptions {
ignoreAssetsPattern "myfile.txt" // does not work
}
}
答案 0 :(得分:19)
我遇到了同样的问题,似乎添加了一个"!"用于指示应排除该文件:
aaptOptions {
ignoreAssetsPattern "!myfile.txt"
}
" assets.exclude"也可以通过添加"!"但我还没有测试过它......
答案 1 :(得分:10)
我认为这应该做你想要的:
android {
aaptOptions {
ignoreAssetsPattern "myfile.txt"
}
}
来源: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-aapt-options
答案 2 :(得分:8)
目前不可能。
packagingOptions
功能不适用于Android资源或资源。
答案 3 :(得分:3)
您可以在构建完成使用groovy task.dolast合并所有资产的内部任务后删除文件
所以在这种情况下 mergeAssets.doLast其中 在#android.applicationVariants.all {变体->
中提供了mergeAssets循环也允许访问其他一些任务
在这里我使用代码删除zip文件和图片文件夹
在Android 3.1.4上进行了测试
希望有帮助
android.applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
variant.mergeAssets.doLast {
println("deleting item.zip', 'images/**' from variant")
delete(fileTree(dir: variant.mergeAssets.outputDir, includes: ['item.zip', 'images/**']))
}
}
}
答案 4 :(得分:1)
试试这个:
export ANDROID_AAPT_IGNORE="ignoreAssetsPatternThatActuallyWorks"
./gradlew assembleDebug
这是影响mergeDebugAssets
步骤(代码found here)的唯一方法。
提起a bug此事。
答案 5 :(得分:0)
只需使用bash
zip -d xx.jar xxx.txt
从jar文件中删除重复的文件
答案 6 :(得分:0)
保护资产文件夹信息如果html
文件是css
或js
,最简单的方法是:
首先在html editor
中编写代码,然后在Java class
中输入,如下所示:
public class Content{
public static final String myContent ="<!DOCTYPE html> ... </html> "
然后通过loadDataWithBaseURL
方法调用
webView.loadDataWithBaseURL(null,Content.myContent, "text/html" , "UTF-8" ,null);
您可以用html代码调用js
和css
:
...
<head>
<link rel="stylesheet" type="text/css"
href="file:///android_asset/css/custom.css" />
<script src="file:///android_asset/js/code.jquery.js"></script>
</head>