Comment exclure certains fichiers à partir de Android Studio gradle construit?
Je suis en utilisant Android Studio avec Google Drive, ce qui rend les fichiers cachés du système visible (comme Icon
et desktop.ini
), causant des erreurs, comme décrit ici. Plutôt que d'exécuter des scripts pour supprimer ces fichiers, je voudrais charger gradle 2.14 pour les ignorer.
Dans une tentative de comprendre comment exclure des fichiers, j'ai créé les fichiers nommés "excludeme.txt" dans les répertoires \app\src\main\res\values
et dans \app\src\main\java\com\hfad\stopwatch\
. J'ai essayé sans succès des différentes modifications de la deux build.gradle
fichiers dans mon projet. Aucun succès exclu le fichier.
Plus précisément, j'ai fait la modification suivante à la build.gradle
fichier pour Module: app
, par cette question:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'], excludes: ['**/excludeme.txt'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
}
J'ai aussi ajouté ceci à la android
section de la même build.gradle
fichier, par cette question:
aaptOptions {
ignoreAssetsPattern "!excludeme.txt"
}
J'ai également ajouté:
sourceSets {
main {
java {
srcDir "src" [I also tried w/o this line]
exclude "**/excludeme.txt"
}
}
}
Lorsque j'ai sélectionné Build > Clean Project
, ce qui a déclenché un build, j'ai obtenu ce résultat, qui montre que le fichier dans le dossier de ressources n'a pas été ignoré:
Information:Gradle tasks [clean, :app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources]
C:\Users\Ellen\GoogleDrive\Ellen-CS115\AndroidStudioProjects\Stopwatch\app\src\main\res\values\excludeme.txt
Error:(1, 1) Error: Premature end of file.
Error:Execution failed for task ':app:mergeDebugResources'.
> C:\Users\Ellen\GoogleDrive\Ellen-CS115\AndroidStudioProjects\Stopwatch\app\src\main\res\values\excludeme.txt:1:1: Error: Premature end of file.
Les résultats ont été les mêmes si j'ai enlevé le point d'exclamation:
aaptOptions {
ignoreAssetsPattern "!excludeme.txt"
}
Comment puis-je donner des instructions appropriées gradle pour ignorer les fichiers contenant un certain modèle lors de la construction de projets Android?
Mise à jour de 1
Par Stefan la suggestion ci-dessous, j'ai ajouté ce qui suit à la build.gradle
fichier pour Module: app
:
android {
[omitted]
sourceSets.main.res.exclude '**/whatever.txt'
}
J'ai ajouté un fichier nommé whatever.txt
dans le res/layout
répertoire, et la compilation a échoué avec:
Error:Execution failed for task ':app:mergeDebugResources'.
> C:\Users\Ellen\GoogleDrive\Ellen-CS115\AndroidStudioProjects\Starbuzz\app\src\main\res\layout\whatever.txt: Error: The file name must end with .xml
Mise à jour 2
Par Nathan de la suggestion, j'ai ajouté:
packagingOptions {
exclude '**/whatever.txt'
exclude 'src/main/res/layout/whatever.txt'
}
à build.gradle (Module: app)
dans le android
section. Pas d'amélioration:
Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources]
/Users/spertus/GoogleDrive/Ellen-CS115/AndroidStudioProjects/MacTest/app/src/main/res/layout/whatever.txt
Error:Error: The file name must end with .xml
Error:Execution failed for task ':app:mergeDebugResources'.
> /Users/spertus/GoogleDrive/Ellen-CS115/AndroidStudioProjects/MacTest/app/src/main/res/layout/whatever.txt: Error: The file name must end with .xml
Information:BUILD FAILED
(Cette dernière version a été sur un Mac, contrairement aux autres, qui étaient sur Windows.)
- Le Gradle documentation sur fichier trees peut être utile. Est-il une raison pour compiler le fileTree dans la section de dépendance de la construire? Si vous serez à l'exception des fichiers à partir de votre construction de ressources, utilisez la
sourceSet
bloc. - Je vous remercie. Je n'ai pas vu un
sourceSet
bloc dans lesbuild.gradle
fichiers. Je vais jeter un oeil à la documentation que vous citez. - Si après avoir essayé un certain nombre de choses avec
sourceSet
vous rencontrez des problèmes, mise à jour de votre réponse et je vais voir si je peux aider 🙂 - J'ai essayé d'ajouter
sourceSets
, comme décrit ci-dessus. Les erreurs semblent tous être sur le fichier de ressources. Je ne suis pas sûr que j'ai besoin pour exclure les non *.fichiers java à partir de répertoires src; ils peuvent être ignorés automatiquement. - Pourriez-vous prendre un autre regard? J'ai essayé d'utiliser
sourceSets
et a ajouté une prime. - J'ai ajouté une réponse qui utilise le
PackagingOptions
DSL objet qui est Android Gradle spécifiques. - Un peu de chance sur ce point? Je ne peut tout simplement pas obtenir exclure/exclut de travail, peu importe ce que je fais. Même la plus simple des cas, ne pas exclure quoi que ce soit.
- Toujours pas de solution.
- J'ai pensé à elle. Voir ma réponse ci-dessous
- Ce Q existait déjà... stackoverflow.com/questions/16701256/...
- Que la question posée à propos de l'exclusion de certains fichiers de classe.
- Vraiment bonne enquête! Il semble aapt prend en charge un --ignore-les actifs de l'option, tout simplement, il exclut certains fichiers d'actifs de finale de l'artefact. Malheureusement aapt ne supporte pas les exclure de tout fichier de ressources, android plugin gradle ne pouvez rien faire à ce sujet. J'envisage de copier les fichiers du projet avant de le construire, puis recopier par la suite.
Vous devez vous connecter pour publier un commentaire.
Ressemble à un changement récent de gradle changé la DSL pour sourceSets, de sorte que vous devez maintenant spécifier les exclure sur le champ de filtre:
app:mergeDebugResources
.Android plugin a son propre concept de SourceSets: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
De sorte que vous aurez probablement envie de faire quelque chose comme
Dans le projet enfant, dans votre cas, je crois que c'est
:APP
, ajouter le texte suivant à labuild.gradle
fichier.La PackagingOptions DSL objet vous permet de contrôler quels fichiers sont inclus dans le
APK
.exclude
prend une chaîne de caractères ou un motif comme un argument qui va vous permettre d'ignorer des fichiers ou des répertoires par nom ou un motif.MODIFIER
Personnalisation des ressources pour conserver de la Android Studio docs.
XML
fichier dans votre projet avec un<resources>
tag.tools:keep="[list resources]"
res/raw/keep.xml
La génération de ne pas inclure ce fichier.La fin du fichier devrait ressembler à celui de la Android Studio Docs
whatever.txt
àwhatever.xml
. Depuis qu'il est dans le dossier mises en page, Android attend peut-être un .fichier xml. Le processus de génération de multi projet s'appuie peut-être un peu déroutant pour traquer ce que la tâche est exécutée en premier, sans explicitement de la commande de chacun d'eux. Une fois que vous modifiez l'extension de voir ce message d'erreur que vous recevez.Après beaucoup de se cogner la tête contre le clavier, cela a fonctionné pour moi:
N. B. Crédit:
Comment obtenir de l'actuel saveur de gradle
pour l'écriture de la getCurrentFlavor méthode,