Résoudre automatiquement la compilation Android Erreur: Les pixels de la vue doivent être soit solides soit transparents (et non des alphas intermédiaires). - Trouvé au pixel n ° 4 le long du bord supérieur
Android Studio (à l'aide du SDK 19, 21 ou 22) montre une erreur que Eclipse ADT (à l'aide du SDK 19) ne tient pas:
Erreur:9-patch image D:\Workspaces....\res\drawable-hdpi\btn_bg_common_press.9.png mal formé.
Erreur de l'Image en pixels doit être solide ou transparent (pas d'intermédiaire alphas). - Trouvé à pixel #4 long du rebord supérieur.
Ou une autre erreur:
Erreur:les Tiques dans le cadre transparent doit être de couleur noire ou rouge.
à la fois au sein de aapt
D'erreur:Erreur: com.android.l'ide.commun.processus.ProcessException: org.gradle.processus.interne.ExecException: Processus "commande " E:\Android\sdk-Android-Studio\build-tools\19.1.0\aapt.exe" fini avec sortie non nulle valeur 42
Exemple de fichier ci-dessus, mais il y a+ de 20 de tels fichiers qui ont bien fonctionné.
Comment puis-je faire Android Studio ou Gradle ignorer cette erreur et de ne pas échouer, sans avoir à modifier les fichiers un par un?
Si il n'est pas possible avec Gradle, ce que l'outil de ligne de commande dois-je utiliser pour remplacer tous les pixel transparent avec des non-transparent?
La construction.gradle fichier pour le module d'application (où les ressources sont), c'est ci-dessous.
J'ai essayé les deux, avec SDK 19 et 21 SDK et construire des outils de 19.1, 21.1.2, 22.
Un problème similaire sur PSBA, Question 159464: Android studio: mergeDebugResources a ÉCHOUÉ lors de l'importation de projet Eclipse.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.+'
}
}
allprojects {
repositories {
jcenter()
}
}
//---
task wrapper(type: Wrapper) {
gradleVersion = '2.2.1'
}
apply plugin: 'com.android.application'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':afinal')
compile 'com.android.support:appcompat-v7:19.0.+'
//compile 'com.android.support:appcompat-v7:21.0.+'
}
//---
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
compileSdkVersion 19
buildToolsVersion "19.1.0"
//compileSdkVersion 21
//buildToolsVersion "21.1.2"
//compileSdkVersion Integer.parseInt(project.COMPILE_SDK_VERSION)
//buildToolsVersion project.BUILD_TOOLS_VERSION
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
zipAlignEnabled true
//signingConfig signingConfigs.release
}
debug {
zipAlignEnabled true
}
}
lintOptions {
//checkReleaseBuilds false
//Or, if you prefer, you can continue to check for errors in release builds,
//but continue the build even when errors are found:
abortOnError false //false also required by https://wiki.jenkins-ci.org/display/JENKINS/Android+Lint+Plugin
}
}//android
Android Gradle plugins sources sont à https://android.googlesource.com/platform/tools/build/+/master.
source d'informationauteur Paul Verest
Vous devez vous connecter pour publier un commentaire.
Pas possible. Puisque vous voulez le .png de se comporter comme un neuf-patch (étendre le long des bords, pas étirer l'ensemble de l'image bitmap), vous allez avoir à les mettre en forme en tant que telle ergo vous devez modifier les fichiers.
Alternative proposée
Car la forme est si simple que vous seriez mieux de supprimer toutes les variantes de ce fichier (en économisant de l'espace, du temps et des maux de tête dans le processus) et de créer
/res/drawable/btn_bg_common_press.xml
drawable avec le contenu suivant:Vous pouvez utiliser
dimen
etcolor
ressources, plutôt que de valeurs codées en dur. En outre, vous pouvez ajouter lepadding
élément à l'intérieur d'shape
et/ou de l'envelopper le
shape
élément à l'intérieur d'uninset
élément.Si vous le faites, le drawable aura implicite de rembourrage et vous n'aurez pas à définir quand le style des widgets. Puisque vous avez plusieurs état un drawable pour le bouton, je vous suggère de les convertir au format XML à assurez-vous que l'épaisseur de la ligne et les coins de match.
En dépit de l'élément racine du nom de la
<shape>
effectivement se gonfle àGradientDrawable
(ce qui signifie que vous pouvez le remplir avec un dégradé au lieu de couleur unie). ExamenGradientDrawable
docs pour l'ensemble de ses options. Ne pas jamais utilisationShapeDrawable
par programme, il ne fonctionne tout simplement pas.L'analyse de 9 patchs
Considérer les trois suivants images agrandies.
Candidat #1 est un neuf-patch. Il a réservé 1px sur chaque côté pour s'étirer et de rembourrage de spécification. Celui-ci va se comporter comme un ordinaire bitmap lorsqu'il est étiré. Si la largeur sera plus grande que la hauteur, l'épaisseur de la bordure sur les côtés. La frontière à l'échelle proportionnellement.
Candidat #2 est également un neuf-patch et est en train de dire qu'il va s'étirer de tout, en plus de 1px frontière et ont implicite rembourrage de 3px sur chaque côté. Il aura une belle fraîcheur 1px frontière lorsqu'il est étiré.
Candidat n ° 3 est PAS neuf-patch. Il évolue de la même manière que #1.
Maintenant, nous allons jeter un oeil à la version agrandie de l'image que vous avez inclus dans l'OP:
Comme vous pouvez le voir, c'est pas un neuf-patch, donc il ne sera pas interprété comme un et les outils de construction sont assez aimables pour vous avertir de cela. Même si les outils de construction ont été plus indulgent et transparent ajouté 1px sur chaque côté pour vous, le résultat serait comporté comme un vulgaire bitmap, sens lorsqu'il est étiré, il devrait ressembler à Un spécimen à la place du résultat attendu de l'échantillon B.
Voici plus de lecture sur neuf-patches. C'est ce qui explique que le supplément de 1px sur chaque côté est utilisé pour.
L'exemple donné n'est pas un 9 patch image, comme il a été dit.
Si vous ne voulez pas modifier chaque ressource afin de la transformer en vigueur 9 patch de ressource, vous pouvez essayez de supprimer ".9" dans le nom de la ressource. De cette façon, le comportement doit être le même, et vous n'obtiendrez pas les erreurs de compilation.
Android a maintenant deux PNG crunchers, AAPT une et Java. Pour ignorer le PNG erreur dans le processus de construction, vous pouvez force Gradle construire à utiliser l'ancien AAPT par le réglage de la ligne ci-dessous dans votre construction.gradle fichier:
Encore cela peut vous donner la même erreur, comme AAPT outil à partir de la dernière kit de développement peut être la vérification de cette erreur trop. Donc, vous avez deux options:
Trouver une ancienne AAPT, par exemple, <SDK chemin>/build-outils/17.0.0/aapt, remplacer votre SDK AAPT avec cet ancien. Vos problèmes de génération peut être résolu. Si cela ne fonctionne pas, essayez l'option en dessous.
D'écrire une simple Bash ou Perl script, le nom "aapt" et le mettre dans votre SDK de construire-dossier outils. Ce script appelle l'ancienne version 17 AAPT pour votre *9.png, et l'utilisation de la nouvelle AAPT pour tout le reste. Voir cette Pile Dépassement de réponse pour un exemple de script.
Pour résoudre ce problème, vous assurer de remplir toutes les arêtes avec du noir ou du rouge à points. Cela a résolu mon problème pour toutes les versions du SDK. Si vous ne voulez pas à l'échelle verticalement ou horizontalement ou les deux d'entre eux, il suffit de remplir tous les bords. Dans ce cas, l'image n'est pas à l'échelle.
Sans erreur
Malformé d'erreur