Gradle: Exclude file from Android assets folder

有些话、适合烂在心里 提交于 2019-12-18 11:04:10

问题


Please, do you know a way how to exclude some file from Android project assets folder before multiple assets folders are merged or during the merge?

For example:

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

回答1:


It's not possible at the moment.

The packagingOptions feature does not apply to Android resources or assets.




回答2:


I run into the same problem and it seems adding a "!" works to indicate the file should be excluded:

aaptOptions {
    ignoreAssetsPattern "!myfile.txt" 
}

"assets.exclude" might work also by adding a "!" but I haven't tested it...




回答3:


I think this should do what you want:

android {
    aaptOptions {
        ignoreAssetsPattern "myfile.txt"
    }
}

Source: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-aapt-options




回答4:


we can delete files/folders after build.gradle has finished its internal task of merging all assets .

android.applicationVariants.all { variant -> }

this is the loop where many android build tasks(in groovy language) are offered.

so in this case mergeAssets.doLast is the groovy task where we can perform delete operations.

here i used code to delete a zip file and images folder

tested on Android 3.1.4

hope it helps

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/**']))
    }
 }
}



回答5:


Try this:

export ANDROID_AAPT_IGNORE="ignoreAssetsPatternThatActuallyWorks"
./gradlew assembleDebug

It's the only way to influence the mergeDebugAssets step (code found here).

Filed a bug about this.




回答6:


just use bash

zip -d xx.jar xxx.txt

to remove duplicated file from jar file




回答7:


To protect assets folder information If the html file is either css or js, the easiest way is to: Write your code in the html editor first, and then enter it in a Java class as follows :

 public class Content{
    public static final String  myContent ="<!DOCTYPE html> ... </html> "

And then call through the loadDataWithBaseURL method

 webView.loadDataWithBaseURL(null,Content.myContent, "text/html" , "UTF-8" ,null);

And you can call js and css in html code :

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


来源:https://stackoverflow.com/questions/25910206/gradle-exclude-file-from-android-assets-folder

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!