Gradle:从Android资源文件夹中排除文件

时间:2014-09-18 10:28:55

标签: android gradle assets build.gradle

请您知道在合并多个资产文件夹之前或合并期间如何从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
  }
}

7 个答案:

答案 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文件是cssjs,最简单的方法是: 首先在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代码调用jscss

 ...
 <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>