我在一个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'
}
答案 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)
答案 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找到我的文件。