Android production build `MissingDefaultResource` lint error.
lpikora opened this issue ยท 7 comments
When building Android app for production build I get this lint error. Its because generator builds only folders drawable-land-xxxx
and drawable-port-xxx
. There should be build also default drawable-xxxx
folders I think.
Temporary solution is suppress this lint error adding this code to android/app/build.gradle
application {
....
lintOptions{
disable 'MissingDefaultResource'
}
}
More info about lint error (source: http://tools.android.com/tips/lint-checks)
MissingDefaultResource
Summary: Missing Default
Priority: 6 / 10
Severity: Fatal
Category: Correctness
If a resource is only defined in folders with qualifiers like -land or -en,
and there is no default declaration in the base folder (layout or values etc),
then the app will crash if that resource is accessed on a device where the
device is in a configuration missing the given qualifier.
As a special case, drawables do not have to be specified in the base folder;
if there is a match in a density folder (such as drawable-mdpi) that image
will be used and scaled. Note however that if you only specify a drawable in
a folder like drawable-en-hdpi, the app will crash in non-English locales.
There may be scenarios where you have a resource, such as a -fr drawable,
which is only referenced from some other resource with the same qualifiers
(such as a -fr style), which itself has safe fallbacks. However, this still
makes it possible for somebody to accidentally reference the drawable and
crash, so it is safer to create a default dummy fallback in the base folder.
Alternatively, you can suppress the issue by adding
tools:ignore="MissingDefaultResource" on the element.
(This scenario frequently happens with string translations, where you might
delete code and the corresponding resources, but forget to delete a
translation. There is a dedicated issue id for that scenario, with the id
ExtraTranslation.)
That can be the solution.
Here's what the doc say.
Providing the best device compatibility with resources
...
Likewise, if you provide different layout resources based on the screen orientation, you should pick one orientation as your default. For example, instead of providing layout resources in layout-land/ for landscape and layout-port/ for portrait, leave one as the default, such as layout/ for landscape and layout-port/ for portrait.
since I upgraded Android Studio I have the same problem :-(
To solve also I have inserted in build.gradle:
lintOptions{
disable 'MissingDefaultResource'
}
Is this sufficient, or will there be problems with the App?
Thanks!
I tried disabling and the app crashes on starts because it cannot find the resource :( did you find a different workaround?
+1, wondering which devices this will cause launch crashes on
Made a drawable-xxx with the image inside and things are working again. Maybe the tool should do the same?
How can I locate a "declaration in the base folder"?
I triggered this issue by renaming a layout (activity_display to activity_displayFriend) using Refactor->Rename...; apparently that didn't adjust the "base folder". I don't want to silence the lint error, because it flags a real problem, as @acatalina reported.
The MissingDefaultResource error is obtusely named. The real issue is that resource file names, *.xml, cannot contain upper case letters. That is in contrast to Java files, where mixed case is typical, e.g., MainActivity.java.