找不到资源可绘制,但它们存在于可绘制文件夹中

时间:2019-01-01 15:49:56

标签: android xml aapt

我在一个Android应用程序上工作了大约2个月。几乎每次我尝试构建项目时创建自定义drawable时,都会出现Android资源链接失败错误,此后,android studio无法找到可绘制对象的名称。

我的解决方案是将这些可绘制对象从项目中移出某个地方,并在遇到错误后重新构建应用程序,然后将可绘制对象再次移回我的项目,并且当我重建APK时再也没有错误,我可以构建,运行甚至生成APK,这些可绘制对象都可以正常工作。但是,既然我的项目完成了,我想生成带签名的apk,但是我无法摆脱Android资源链接失败的错误。 我在下面放了一些可绘制代码。

retry_btn.xml

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/register_btn_disabled"/>
    <item android:state_pressed="true" android:drawable="@drawable/register_btn_clicked"/>
    <item android:state_pressed="false" android:drawable="@drawable/register_btn_normal"/>
    <item android:drawable="@drawable/register_btn_normal"/>
</selector>

story_box.xml

<?xml version="1.0" encoding="utf-8"?>
    <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:color="#70707070" android:width="1dp"/>
</shape>

table_border.xml

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item>
            <shape
        android:shape="rectangle">
                <stroke android:width="1dp" android:color="#333333" />
                <solid android:color="#EEEEEE" />
        </shape>
    </item>
</layer-list>

所有可绘制对象在我的项目中都可用,但是当我尝试生成签名的apk时,我得到了以下输出:

  

Android资源链接失败

     
    

输出:C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ src \ main \ res \ layout \ activity_main.xml:51:错误:资源可绘制/搜索(aka uk.MyAppName.www.MyAppName:drawable /搜索)。
    C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ src \ main \ res \ layout \ activity_movie.xml:234:错误:找不到资源drawable / story_box(又名uk.MyAppName.www.MyAppName:drawable / story_box)。
    C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ src \ main \ res \ layout \ activity_no_internet.xml:49:错误:找不到资源drawable / retry_btn(aka uk.MyAppName.www.MyAppName:drawable / retry_btn)。
    C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ src \ main \ res \ layout \ activity_register.xml:205:错误:找不到资源drawable / register_btn(又名uk.MyAppName.www.MyAppName:drawable / register_btn)。
    C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ src \ main \ res \ layout \ activity_register.xml:215:错误:找不到资源drawable / register_btn(又名uk.MyAppName.www.MyAppName:drawable / register_btn)。
    C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ src \ main \ res \ layout \ activity_search.xml:39:错误:找不到资源可绘制/搜索(又名uk.MyAppName.www.MyAppName:drawable / search)。
    C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ src \ main \ res \ layout \ search_table_item.xml:2:错误:找不到资源drawable / table_border(又名uk.MyAppName.www.MyAppName:drawable / table_border)。
    C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ src \ main \ res \ layout \ table_item.xml:2:错误:找不到资源drawable / table_border(又名uk.MyAppName.www.MyAppName:drawable / table_border)。
    错误:链接文件资源失败。

         

命令:C:\ Users \ MyUser.gradle \ caches \ transforms-1 \ files-1.1 \ aapt2-3.2.1-4818971-windows.jar \ ac5e520165d725772f5386c054776ce5 \ aapt2-3.2.1-4818971-windows \ aapt2。 exe链接-I \
            C:\ Users \ MyUser \ AppData \ Local \ Android \ Sdk \ platforms \ android-28 \ android.jar \
            --manifest \
            C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ build \ intermediates \ merged_manifests \ release \ processReleaseManifest \ merged \ AndroidManifest.xml \
            -o \
            C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ build \ intermediates \ processed_res \ release \ processReleaseResources \ out \ resources-release.ap_ \
            -R \
            @C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ build \ intermediates \ incremental \ processReleaseResources \ resources-list-for-resources-release.ap_.txt \
            --auto-add-overlay \
            --java \
            C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ build \ Generated \ not_namespaced_r_class_sources \ release \ processReleaseResources \ r \
            --proguard \
            C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ build \ intermediates \ proguard-rules \ release \ aapt_rules.txt \
            --custom-package \
            uk.MyAppName.www.MyAppName \
            -0 \
            apk \
            --output-text-symbols \
            C:\ Users \ MyUser \ AndroidStudioProjects \ MyAppName \ app \ build \ intermediates \ symbols \ release \ R.txt \
            --no-version-vectors
    守护进程:AAPT2 aapt2-3.2.1-4818971-windows守护进程#0

  

这是我的gradle文件:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "uk.MyAppName.www.MyAppName"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
//            minifyEnabled false
//            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    productFlavors {
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:exifinterface:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:design:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'org.jetbrains.anko:anko-commons:0.10.4'
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'com.google.android.exoplayer:exoplayer:2.9.1'
}

10 个答案:

答案 0 :(得分:3)

在某些情况下,它与重命名可绘制对象无关。

重新检查您处理的最后一个 drawable/xml 文件,这很可能是罪魁祸首。

我错误地在顶部有 2 个根标签 <?xml version="1.0" encoding="utf-8"?>

答案 1 :(得分:2)

我也遇到了同样的问题。只需使用sdk版本(例如(drawable-24))创建一个新的drawable文件夹,然后将您的drawable粘贴到此处,然后重新构建项目即可。

答案 2 :(得分:1)

如果在gradle文件中使用 shrinkResources ,请删除它。也可能在启用 proguard 时发生

答案 3 :(得分:1)

对于所有遇到此问题的人,只需将您的drawable文件夹更改为drawable-v(您的sdk版本),希望此答案可以解决您的问题。或添加具有上述名称的另一个可绘制目录,然后只需在其中复制您的可绘制文件即可。

答案 4 :(得分:1)

如果您要构建应用的发行版,请确保说res的{​​{1}}文件不在not found文件夹中,则可以通过打开文件来进行检查按照debug视图而不是Project视图

答案 5 :(得分:0)

寻找您的gradel文件,并确保应用程序ID与包属性中mainfest文件的包相同

答案 6 :(得分:0)

适用于我的类似问题的方法是删除对可绘制ID的引用,然后使用Android Studio的自动完成功能将其还原。

答案 7 :(得分:0)

这似乎是我遇到的类似错误

使用Analyse -> inspect code ...工具在日志中显示错误

drawable not found

请在此处查看完整说明

答案 8 :(得分:0)

对我来说,从android库中插入新的Image Vector资产时会出现问题。

这是我已经在文件夹中的一项资产:一个保存图标,所以我给它起了不同的名字。

我以前对所有资产都有标准值,所以我将ctrl + C,ctrl + V这些值应用于新创建的资产,它们仅包括颜色和大小,如下所示:

xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#718792"
android:viewportWidth="24.0"
android:viewportHeight="24.0"

我总是保持原状。

删除此资产后,一切恢复正常。

在不测试插入的每一行的情况下,永远不应该全力以赴编写代码的情况(非常类似于帕夫洛夫对AutoCad中ctrl + G的响应,对于那些知道的人),...我什至不夸张的。

答案 9 :(得分:0)

在我的xml中,它使用"@android:drawable/"而不是"@drawable/"。更改为"@drawable/"允许Android Studio找到我的文件。