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.
- Magia o versión de archivo de clase incorrecta
- ¿Cómo usar el cliente Apache HTTP heredado en Android Marshmallow?
- Android Studio 0.4 Archivos duplicados copiados en APK META-INF / LICENSE.txt
- Android Studios RuntimeException: Excepción inesperada en el hilo del escritor de dex
- La mejor manera de administrar las dependencias de Android Gradle
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
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
- Ejecutar AspectJ causa NoSuchMethodError: Aspect.aspectOf
- Versión Gradle y gradle-wrapper.properties
- Proyecto Android de Studio importado sin archivo Build.gradle o settings.gradle
- Gradle y dependencias no transitivas anidadas
- Añadir Android Library a un proyecto existente en Android Studio 0.3.6
- Cómo poner mis bibliotecas delante de android.jar editando build.gradle en Android-Studio
- Obtener excepción de transformación al crear el proyecto
- Problemas con rxjava-android
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.
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:
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.
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
- Error: JNI ERROR (bug de la aplicación): se accede a la referencia global obsoleta
- ¿Cómo puedo depurar eficazmente el código C que está envuelto con JNI en Eclipse? (Android Dev)