Automáticamente resuelve Android build Error: Los píxeles del marco deben ser sólidos o transparentes (no alfas intermedios). – Encontrado en el pixel # 4 a lo largo del borde superior

Android Studio (utilizando SDK 19, 21 o 22) muestra un error que Eclipse ADT (con SDK 19) no:

Error: imagen de 9 parches D: \ Espacios de trabajo …. \ res \ drawable-hdpi \ btn_bg_common_press.9.png malformado. Error: Los píxeles del marco deben ser sólidos o transparentes (no alfas intermedios). – Se encuentra en el pixel # 4 a lo largo del borde superior.

U otro error :

Error: Las marcas en el marco transparente deben ser de color negro o rojo.

Ambos dentro de aapt

Error: Error: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Proceso 'comando' E: \ Android \ sdk-Android-Studio \ build-tools \ 19.1.0 \ aapt .exe '' terminado con un valor de salida distinto de cero 42

Btn_bg_common_press.9.png

El ejemplo del archivo está arriba, pero hay más de 20 archivos que funcionaron bien.

¿Cómo hacer Android Studio o gradle para omitir este error y no fallar sin tener que modificar esos archivos uno por uno?

Si no es posible con gradle, ¿qué herramienta de línea de comandos podría utilizar para reemplazar todos los píxeles transparentes con no transparentes?

UPDATE: build.gradle para el módulo de aplicación (donde están los recursos) está abajo.

He intentado ambos con SDK 19 y SDK 21 , construir las herramientas 19.1, 21.1.2, 22

Problema similar en AOSP Issue 159464: Estudio de Android: mergeDebugResources FALLA al importar el proyecto 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 

Las fuentes de complementos de Android gradle están disponibles
Https://android.googlesource.com/platform/tools/build/+/master

Cómo resolver automáticamente el problema (sin comprobar todas las imágenes en diferentes resoluciones)

Imposible. Puesto que usted quiere que el .png se comporte como un parche de nueve (expandir a lo largo de los bordes, no estirar todo el mapa de bits), usted va a tener que darles formato como tal ergo usted tiene que modificar los archivos .

Alternativa propuesta

Dado que la forma es tan simple que sería mejor eliminar todas las variantes de este archivo (ahorro de espacio, tiempo y dolor de cabeza en el proceso) y crear /res/drawable/btn_bg_common_press.xml con los siguientes contenidos:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="16dp"/> <solid android:color="#ccc"/> <stroke android:color="#0c0" android:width="2dp"/> </shape> 

Puede utilizar dimen y recursos de color lugar de valores codificados. Además, es posible que desee agregar el elemento de padding dentro de la shape

 <shape...> <padding android:top="8dp" android:left="8dp" android:bottom="8dp" android:right="8dp"/> </shape> 

Y / o envolver el elemento de shape dentro de un elemento inset .

 <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="8dp" android:insetLeft="8dp" android:insetBottom="8dp" android:insetRight="8dp"> <shape...> </inset> 

Si haces eso, el dibujable tendrá relleno implícito y no tendrás que configurarlo cuando estilizas widgets. Puesto que usted tiene varios estados desplegables para el botón que sugiero que convertir todos ellos a XML para asegurarse de que el grosor de la línea y las esquinas coinciden.

A pesar del nombre del elemento raíz, el <shape> infla de hecho a GradientDrawable (lo que significa que puedes llenarlo con gradiente en lugar de color sólido). Revise los documentos de GradientDrawable para todas sus opciones. Nunca utilice ShapeDrawable programática, simplemente no funciona.

Analizando 9 parches

Considere las tres siguientes imágenes ampliadas.

Nueve muestras de parches

El Candidato # 1 es un parche de nueve. Tiene 1px reservado en cada lado para la especificación del estiramiento y del relleno. Este se comportará como un mapa de bits normal cuando se estira. Si el ancho será mayor que la altura, también lo será el grosor del borde en los lados. La frontera se escalará proporcionalmente.

Candidato # 2 es también un parche de nueve y está diciendo que va a estirar todo, además de 1px frontera y tendrá relleno implícita de 3px en cada lado. Tendrá un borde 1px crujiente agradable cuando estirado.

El Candidato # 3 NO es un parche de nueve. Se escala de la misma manera que # 1.

Ahora echemos un vistazo a la versión ampliada de la imagen que incluyó en OP:

Imagen ampliada de OP

Como se puede ver, no es un parche de nueve, por lo que no se interpretará como uno y las herramientas de construcción son lo suficientemente amables para advertirle de eso. Incluso si las herramientas de construcción más antiguas eran más tolerantes y se agregaba 1px transparente en cada lado para usted, el resultado se habría comportado como un mapa de bits ordinario, es decir, cuando se estira, se vería como el espécimen A en lugar del resultado esperado.

Comparación de un mapa de bits y un parche de nueve

Aquí hay más lectura en nueve parches . Esto explica por qué se utiliza el 1px extra de cada lado.

El ejemplo dado no es una imagen de 9 parches, como se ha dicho.

Si no desea modificar cada recurso para transformarlo en un recurso de revisión válido, podría intentar eliminar ".9" en el nombre de los recursos. De esta forma, el comportamiento debe ser el mismo y no obtendrá errores de compilación.

Android ahora tiene dos crujidores de png, el aapt uno y uno de java. Para ignorar el error png en el proceso de compilación, puede forzar la compilación gradle para usar aapt antiguo, estableciendo debajo de la línea en su build.gradle

 android.aaptOptions.useAaptPngCruncher = true 

Sin embargo, esto puede darle el mismo error, como una herramienta aapt de SDK más reciente podría estar comprobando este error también. Así que tienes 2 opciones:

  • Por ejemplo: /build-tools/17.0.0/aapt, sobrescribe tu sdk aapt actual con este antiguo. Los problemas de compilación ahora pueden resolverse. Si esto no funciona, pruebe la siguiente opción.

  • Escriba un script bash o perl simple, llámelo "aapt" y póngalo en su carpeta actual de build-tools de SDK, este script llamará old a177 aapt para su * 9.png, y use aapt nuevo para todo lo demás. Vea esta respuesta de SO para un script de ejemplo.

Para solucionar este problema asegúrese de llenar todos los bordes con puntos negros o rojos. Esto resolvió mi problema en toda la versión sdk. Si no desea que la escala sea vertical u horizontal, o ambos simplemente llenar todo el borde. En este caso, la imagen no escala introducir aquí la descripción de la imagen sin error con error malformado

  • Ejecute la tarea después de packageApplication cuando utilice el complemento androide gradle
  • Error: Ninguna propiedad: GRUPO para la clase: org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer
  • ¿Es Icepick roto?
  • Android Studio Error JUNIT4! JUnit versión 3.8 o posterior esperado:
  • ¿Cómo apuntamos androidTest a un Peer Eclipse-Style Project?
  • Error de Gradle en la aplicación: packageDebug, Android Studio, Ubuntu
  • Multidex Android, UnsatisfiedLinkError - no pudo encontrar el archivo .so
  • Android Gradle: renombrar / deshabilitar tipo de compilación predeterminado
  • Tiene "versión de archivo de clase no compatible 52.0" después de incluir un módulo en un proyecto
  • Gradle Build Error en Android Studio (No se puede leer testArtifacts.bin desde la memoria caché)
  • Configuración de google_app_id sin google_play_services.json o gradle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.