热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自动解决Android构建错误:帧像素必须是实心或透明(不是中间alpha).-在顶部边缘的像素#4处找到

如何解决《自动解决Android构建错误:帧像素必须是实心或透明(不是中间alpha).-在顶部边缘的像素#4处找到》经验,为你挑选了2个好方法。

Android Studio(使用SDK 19,21或22)显示Eclipse ADT(使用SDK 19)不会出现错误:

错误:9-patch image D:\ Workspaces ....\res\drawable-hdpi\btn_bg_common_press.9.png格式错误.错误:帧像素必须是实心或透明(不是中间alpha). - 在顶部边缘的像素#4处找到.

或者另一个错误:

错误:透明框中的刻度必须为黑色或红色.

内在的 aapt

错误:错误:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:处理'命令'E:\ Android\sdk-Android-Studio\build-tools\19.1.0\aapt .exe''以非零退出值42结束

btn_bg_common_press.9.png

文件的例子在上面,但有20多个这样的文件运作良好.

如何让Android Studio或Gradle跳过此错误而不会失败而不必逐个修改这些文件?

如果使用Gradle无法实现,我可以用什么命令行工具替换所有透明像素?

应用程序模块(资源所在的)的build.gradle文件如下所示.

我已经尝试过SDK 19和SDK 21以及构建工具19.1,21.1.2,22.

AOSP上的类似问题,问题159464:Android studio:mergeDebugResources导入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插件源代码位于https://android.googlesource.com/platform/tools/build/+/master.



1> Eugen Pechan..:

如何自动解决问题(不检查不同分辨率的所有图像)

不可能.由于你希望.png表现得像九个补丁(沿着边缘展开,而不是拉伸整个位图),你将不得不格式化它们,因为你必须修改文件.

建议的替代方案

由于形状如此简单,您最好删除此文件的所有变体(在此过程中节省空间,时间和头痛)并/res/drawable/btn_bg_common_press.xml使用以下内容创建drawable:



    
    
    

您可以使用dimencolor资源而不是硬编码值.另外,您可能想要在padding里面添加元素shape


    

和/或将shape元素包装在inset元素中.


    

如果你这样做,drawable将有隐含的填充,你不必在样式小部件时设置它.由于按钮有多个状态可绘制,我建议您将所有状态转换为XML,以确保线条粗细和边角匹配.

尽管根元素的名称实际上是膨胀的GradientDrawable(意味着你可以用渐变而不是纯色填充它).查看所有选项的GradientDrawable文档.不要永远使用ShapeDrawable编程方式,它只是不工作.

分析9个补丁

考虑以下三个放大图像.

九贴片样本

候选人#1是9补丁.它在每侧保留1px用于拉伸和填充规范.这个在拉伸时会表现为普通的位图.如果宽度将大于高度,那么边缘的边缘厚度也将如此.边界将按比例缩放.

候选人#2也是一个9补丁,并且实际上说它将扩展除1px边界之外的所有内容,并且每侧都会隐含3px的填充.拉伸时会有一个漂亮的1px边框.

候选人#3 不是九补丁.它的扩展方式与#1相同.

现在让我们来看看你在OP中包含的图像的放大版本:

来自OP的放大图片

正如你所看到的那样,它不是一个9补丁,所以它不会被解释为一个,而构建工具也足以警告你.即使较旧的构建工具更宽容并且每侧为您添加透明的1px,结果也会表现得像普通的位图,这意味着当拉伸它看起来像样本A而不是预期的结果样本B.

比较位图和九个补丁

这里有九个补丁的更多阅读.这解释了每侧额外的1px用于什么.



2> Jofre Mateu..:

给出的例子不是9补丁图像,因为它被告知.

如果您不想修改每个资源以将其转换为有效的9补丁资源,则可以尝试删除资源名称中的".9".这样,行为应该是相同的,并且您不会遇到构建错误.


推荐阅读
author-avatar
欧阳火凡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有