Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android production build MissingDefaultResource lint error. #203

Open
lpikora opened this issue Dec 5, 2018 · 7 comments
Open

Android production build MissingDefaultResource lint error. #203

lpikora opened this issue Dec 5, 2018 · 7 comments

Comments

@lpikora
Copy link

lpikora commented Dec 5, 2018

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.)

@jjchula
Copy link

jjchula commented Dec 25, 2018

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.

@nobady90
Copy link

nobady90 commented Feb 6, 2019

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!

@acatalina
Copy link

acatalina commented Apr 5, 2019

I tried disabling and the app crashes on starts because it cannot find the resource :( did you find a different workaround?

@1pocketaces1
Copy link

+1, wondering which devices this will cause launch crashes on

@thinklinux
Copy link

Made a drawable-xxx with the image inside and things are working again. Maybe the tool should do the same?

@Quiigi
Copy link

Quiigi commented Feb 16, 2020

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.

@Quiigi
Copy link

Quiigi commented Feb 21, 2020

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants