Intereting Posts
IOS cotrols скрываются и уходят как андроид Плохое качество изображения после изменения размера / масштабирования растрового изображения Интерфейсы API не должны расширять другие интерфейсы. Модернизация 2 Как я могу отключить «вернуться» к некоторой активности? Выбор цвета выбора позиции строки Recyclerview Android Wear – начните работу с переносного действия Добавление разрешений к манифесту приложения программно Рисование круга в андроиде WHERE IN в Android sqlite? Реализовать индикатор активности вращения, аналогичный iOS в Android Android, org.simpleframework.xml Исключение стойкости, элемент «foo» уже используется Как медийные проигрыватели Android продолжают играть песни, когда приложение закрыто? Как передать значения между диалогом и активностью? Голосовая команда стекла в ближайшем матче из данного списка Служба Google Play Services отсутствует в папке «Дополнительно» в SDK Manager

Как исключить файл из архива библиотеки Android .AAR с помощью gradle

Я пытаюсь создать файл AAR для проекта Android-библиотеки с помощью Android Studio и gradle.

Я хочу исключить из этого архива конкретные папки и файлы, но я не могу найти рабочее решение.

Проект имеет 2 аромата.

app/ |--libs/ |--src/ |--flavour1/ | |--java/ | |--a1/ | | |--class_File1.java |--flavour2/ | |--java/ | |--a1/ | | |--class_File1.java |--main/ |--java/ | |--... |--res/ | |--raw/ | | |--comments.txt | |--... |--AndroidManifest.xml 

И я использую файл build.gradle, подобный этому

 apply plugin: 'com.android.library' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { minSdkVersion 10 targetSdkVersion 21 } packagingOptions { exclude 'assets' exclude '**/comments.txt' } sourceSets { flavour1 { resources { exclude '**/comments.txt' } } flavour2 { } } buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } productFlavors { flavour1 { packagingOptions { exclude 'assets' exclude 'res/raw/comments.txt' } } flavour2 { } } } dependencies { compile 'com.google.android.gms:play-services:+' } 

Вообще говоря, я много экспериментировал. Я попробовал packageOptions, исключение в sourceSets, но ничего не работает. То, чего я пытаюсь достичь, не включает, например, в архив .AAR файл comments.txt и папку «активы», которая является дополнительной папкой. Я каждый раз проверяю файл .AAR, переименовывая его в zip и просматривая файлы.

Я также рассмотрел документацию здесь: http://simpligility.github.io/android-maven-plugin/aar-mojo.html#configurations, где, возможно, конфигурации могут быть решением, но я не уверен, как его использовать или как двигаться вперед. Любая помощь будет оценена по достоинству.

Solutions Collecting From Web of "Как исключить файл из архива библиотеки Android .AAR с помощью gradle"

Подумайте, что это связано с этой проблемой. Как правило, вы можете попробовать:

  • Исходный набор исключает
  • Варианты упаковки
  • Параметры Aapt

Однако я не мог заставить их работать.

Тем не менее, вы можете сделать некоторые уродливые хаки:

 def filterVariant = { variantToFilter, filterTask-> def vv = android.sourceSets."${variantToFilter}".res.srcDirs println "${variantToFilter} --> ${vv*.toString()}" def variantRes = android.sourceSets."${variantToFilter}".res variantRes.srcDirs.each{ resDir-> def filterOutput = "${buildDir}/res-filter" if (resDir.toString().contains(filterOutput)) { return } println "begin filter ${resDir} to ${filterOutput}/${variantToFilter}" filterTask.from fileTree(dir: resDir, exclude: '**/comment.txt') filterTask.into "${filterOutput}/${variantToFilter}" variantRes.srcDirs = ["${filterOutput}/${variantToFilter}"] } } project.task('filterMainResources', type: Copy) { filterVariant 'main', it } android.libraryVariants.all{ variant -> project.task("filter${variant.name}Resources", type: Copy) { filterTask -> filterVariant "${variant.name}", filterTask filterTask.dependsOn "filterMainResources" } variant.mergeResources.dependsOn("filter${variant.name}Resources") } 

Я не могу попробовать это сейчас, но это, вероятно, будет моим подходом:

 sourceSets { main { manifest.srcFile 'AndroidManifest.xml' aidl.srcDirs = ['src'] resources.srcDirs = ['src'] renderscript.srcDirs = ['src'] java.srcDirs = ['src'] res.srcDirs = ['res'] } flavor1 { java.srcDirs = ['src/main/java', 'src/flavor1/java'] res.srcDirs = ['src/flavor1/res'] //this differs from your structure assets.srcDirs = [] } flavor2 { java.srcDirs = ['src/main/java', 'src/flavor2/java'] res.srcDirs = ['src/flavor2/res'] //this differs from your structure assets.srcDirs = ['src/main/res/raw'] } } 

Опять же, я не мог попробовать, так что это может быть полная глупость. Идея заключалась в том, чтобы не исключать вещи, но включать только файлы / dirs, которые вы хотите в себе. Это может привести к дублированию файлов / папок на каждый вкус!

В качестве источников я бы рекомендовал: Руководство пользователя Gralde Plugin , ответ от Xavier Ducrohet, а также этого Gradle + Android, хотят перезаписать / активы с помощью специальной папки в buildFlavor .