138

I'm getting the dreaded package R does not exist, it's killing me. The code is fine I have apps in the market running the code.

Now it's effecting simple webview applications. o.0

R.string.app_name is error'd my main.xml and string.xml is fine. I'm sooo confused.

I re opened an older version to "borrow" some code and it was flooded with R. errors. I did a clean and nothing changed except for import R.android being added at the top.

I even loaded into Netbeans and I get the same thing. Clean is not working. Can I write the R.java file myself?

What is this R thing? isn't R. supposed to correspond to R.java

Rathakrishnan Ramasamy
  • 1,612
  • 2
  • 25
  • 46
Taz Ryder
  • 1,381
  • 2
  • 8
  • 3

35 Answers35

149

For anyone who ran into this, I refactored by renaming the namespace folders. I just forgot to also edit AndroidManifest and that's why I got this error.

Make sure you check this as well.

Ry-
  • 218,210
  • 55
  • 464
  • 476
Mathijs Segers
  • 6,168
  • 9
  • 51
  • 75
  • 1
    It seems that I'm only able to access R from within my activity classes. I was getting this error attempting to access it from other class files. – Joe Lapp Dec 16 '15 at 23:32
110

Just to make this simple:

import your.app.package.R;

Of course, replacing your.app.package with your app package.

In all the classes which use R resource references, remove any other import with .R, i.e. import android.R;

ocodo
  • 29,401
  • 18
  • 105
  • 117
  • 3
    When using Cordova, this is the proper solution. Tested with Cordova 3.0.9 – Peter Sep 26 '13 at 09:43
  • 1
    Actually, my mistake. This allows the Cordova project to BUILD properly, however the Splash screen still does NOT appear... So this solution doesn't actually solve the issue at hand. – Peter Sep 26 '13 at 09:53
  • This is what I needed to do when converting an Eclipse test project to an Android Studio module. – RightHandedMonkey Aug 31 '15 at 14:11
  • If you are using phonegap and add above import statement inside your plugins file, then make sure to remove platform and add again. Like this `phonegap platform remove android` and `phonegap platform add android` – Fawaz Jul 03 '17 at 11:17
  • Really dumb question, but where do you write this? – Statsanalyst Oct 01 '20 at 01:23
59

TL;DR, if you get the error "package R does not exist", possible reasons are

  • some error in the XML resource files
    -> fix XML errors
  • the current package is different from the R package (see package attribute in AndroidManifest.xml)
    -> import R class, e.g. import com.example.android.R;
    -> or use the appropriate package in your source, e.g. package com.example.android;
    -> or change the package attribute in AndroidManifest.xml to <manifest xmlns:android="..." package="com.example.android" ...>, if that's appropriate
  • the used R ids are from the system resources
    -> do not import android.R, but prefix the offending ids with android., e.g. android.R.layout.simple_list_item_2
    You may import android.R instead of prefixing the ids of course, but then you cannot import the application R class anymore and must prefix the application ids, e.g. com.example.android.R.id.main_menu.

The R class is generated automatically from the application's resources. It contains the ids for these resources and is contained in the package named in the <manifest> tag in the corresponding AndroidManifest.xml file.

If there are no errors in the resource XML files, the R.java source will be generated in a package subdirectory below gen/ and compiled.


There is another R class located in the android package. This android.R class contains some nested classes, which in turn contain ids and other values for system resources.


To use a class in Java, you must name the class with the whole package, e.g.

java.util.List<Object> list = new java.util.ArrayList<Object>();

or import the class and then use it without package

import java.util.List;
import java.util.ArrayList;
List<Object> list = new ArrayList<Object>();

You can also use a class without naming the package, if both the current class and the used class are in the same package, e.g.

package com.example.android;
public class A {
    /* ... */
}
package com.example.android;
public class B {
    public void useA() {
        A a = new A();
    }
}
Olaf Dietsche
  • 72,253
  • 8
  • 102
  • 198
  • 1
    In my case, the problem was classpath 'com.android.tools.build:gradle:3.3.0'. I changed it to classpath 'com.android.tools.build:gradle:3.2.1' and problem solved. – Mohit Rajput Jan 27 '19 at 09:23
26

Never, ever try to write the R class yourself!

Have you imported the right R class in your files?

Doing

import android.R;

instead of

import com.example.R;

seems to be the problem for a lot of people. After cleaning and building, my classes sometimes import the wrong one.

J. Maes
  • 6,862
  • 5
  • 27
  • 33
14

if you are developing in android studio and refactored the package name then you should change the package name in android manifest and app gradle file.

 applicationId "change here your package name"

and in manifest file

 package="change here your package name"
Milon
  • 2,221
  • 23
  • 27
11

R.java is an autogenerated file, it usually does not get compiled if you have errors in xml file.

No You cannot write your own R.java file, it has to be generated by the resource compiler.

Check for errors in all your xml files.

nandeesh
  • 24,740
  • 6
  • 69
  • 79
8

I suppose it used to work but now it doesn't..

This can happen if you change PACKAGE name inside your MANIFEST file

<manifest
   package="com.example.android...."

If you want to change package name

  1. Change the package name manually in the manifest file.
  2. Click on your R.java class and the press F6. It will allow you to move the class to other package, and all references to that class will be updated.
Emanuele Greco
  • 12,551
  • 7
  • 51
  • 70
  • You are a god! I was changing my project from `com.example.rickydam.txtbooks` to `com.txtbooks.txtbooks` by making a new project and I moved everything over to the new project but it couldn't find R. I tried invalidating caches, syncing with gradle, cleaning the project, rebuilding the project, reinstalling SDK-tools... Nothing was working! But your solution fixed my problem! Thanks again! Keep on coding! – Ricky Dam Jul 03 '18 at 22:43
  • this is exactly the problem I had, the R package is only resolved inside activities that lie within the `package` reported in the top `manifest` node – lurscher Apr 27 '21 at 17:03
6

The R class is Java code auto-generated from your XML files (UI layout, internationalization strings, etc.) If the code used to be working before (as it seems it is), you need to tell your IDE to regenerate these files somehow:

  • in IntelliJ, select Tools > Android > Generate sources for <project>
  • (If you know the way in another IDE, feel free to edit this answer!)
Community
  • 1
  • 1
DomQ
  • 4,184
  • 38
  • 37
4

I just ran into this error while using Bazel to build an Android app:

error: package R does not exist
                + mContext.getString(R.string.common_string),
                                      ^
Target //libraries/common:common_paidRelease failed to build
Use --verbose_failures to see the command lines of failed build steps.

Ensure that your android_library/android_binary is using an AndroidManifest.xml with the correct package= attribute, and if you're using the custom_package attribute on android_library or android_binary, ensure that it is spelled out correctly.

Jin
  • 12,748
  • 3
  • 36
  • 41
4

This might happen when using R in sub packages Example:

com.example; // -app package and main Resources mapped to app package

com.example.order; // -sub package

in the sub package if you need to access a resource like,

R.Layout.orderLayout - Here R will not be available.

To solve this you would import the R from main package. ie. For files in the com.example.order folder/package you would import

package com.example.order import com.example.R;

MPV
  • 337
  • 3
  • 10
3

Delete import android.R; from all the files.. once clean the the project and build the project.... It will generate

satish
  • 65
  • 1
  • 9
3

Sample: My package is com.example.mypc.f01, to fix error you add line below to Activity:

import com.example.mypc.f01.R;

O Thạnh Ldt
  • 1,103
  • 10
  • 11
3

Below are some technics which you can use to remove this error:-

  1. Clean your project, Buidl->clean Project
  2. Rebuild project, Build -> Rebuild Project
  3. Open manifest and check is there any resource missing
  4. Check-in layout to particular id if missing add it
  5. If the above steps did not work then restart android studio with invalidating the cache
3

This is how i solved it After several failed attempts of Build -> Clean Project followed by Build -> Rebuild Project

Step 0 : Made sure Package name is correct in AndroidManifest.xml in my case it was

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myproject"> 

Step 1 Place the cursor before myproject and press Shift + F6 -> Rename Package -> Give your new package name and under Scope select All Places -> Refactor

Step 2 : Turn Off Auto Import

For Windows its File -> Settings -> Editor -> General -> Auto Import

Under Java

uncheck Add unambiguous imports on the fly

uncheck Optimize imports on the fly

Apply and save

Step 3: Clean and Rebuild Build -> Clean Project followed by Build -> Rebuild Project

Now when you get the error during Build. Open the File that says R.java is missing or Cannot Find "R" class

Step 4: Open the file and Go to its imports section in the code and add manually import com.example.myproject.R;

Repeat the same for all the files mentioned in the Build Section that has this error

Clean and Rebuild and you are good to go !

Dharman
  • 30,962
  • 25
  • 85
  • 135
Allan_Aj5
  • 125
  • 1
  • 4
3

After upgrading to AGP 7.2:

For the poor fellas that have upgraded to AGP 7.2 (stable version!!):

  • the AGP Upgrade Assistant will remove the package name from the Manifest
  • It is no longer needed, as it'll be just on the gradle file
  • But SafeArgs dependency still doesn't get that correctly though.. (link)

Hopefully you'll waste fewer hours that I did.. :)

Paschalis
  • 11,929
  • 9
  • 52
  • 82
2

In my case I realized that I was creating multiple packages in the project. Within the Android Manifest I found that the provider name was incorrectly holding the value of MyContentProvider instead of .provider.MyContentProvider. My main package (with the UI) was co.companyname.database.provider instead of co.companyname.database.

Then on the import statements for the affected class I simply right-clicked and asked Android Studio (0.8.6) to optimize my import statements. I also noted that if you search for .R in the AS search bar at the top right corner of the IDE you can find an auto generated R.java file that is part of your package. At this point you don't have to change anything. Studio should fix up the project after you correct the Android Manifest file and rebuild.

One other item is that in one class I was doing making use of the toString().length() to evaluate a string but swapped those out for TextUtils.IsEmpty (stringVal); Can't think of anything else that I did to resolve the issue.

Hope this helps someone.

NB - All of this is with AS 0.8.6

P.S.

R.java is auto-generated so read the header: /* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * aapt tool from the resource data it found. It * should not be modified by hand. */

Tommie C.
  • 12,895
  • 5
  • 82
  • 100
2

When I experienced this, I created a new project, and copied the files from my old project to my new one.

  1. Start a new project
  2. Add the old files into the new project (copy and right click on Layout, drawables,com.packagename,...) to paste my old projects files

However, I still had the same problem: R does not exist. Then I realised that I had copied and pasted Manifest from my notepad into Android Studio manifests and I hadn't changed the package name in the manifest file.

Therefore, once I changed the package name in the manifest to the new project name, the new project I'd created worked fine.

Matt
  • 74,352
  • 26
  • 153
  • 180
2

Below are worked for me.

  1. In AndroidManifest.xml file, check whether the package name is correctly typed.
  2. import com.example.appName.R; (import package _name.R;)

If the first step is not worked try the second one.

Dulya Perera
  • 147
  • 2
  • 11
2

First check all Androidmanifest and make sure that the package names are correct. Also check the manifest of the libraries in your project if any

Secondly, add " import your.package.name.R; " in the header of the affected files.

Am sure either of these two options will solve your problems

James Idowu
  • 223
  • 3
  • 4
1

What files are you importing into the files getting the R error?

My understanding of the R file are that they are automatically generated reference lists to all attributes within the Android app. Therefore, you can't change it yourself.

Are you using Eclipse to build this project? Were the older projects getting these errors made before updating Eclipse? What are the references that are getting errors?

Check to make sure that you've not imported another R file from other copied code in another app.

Andro Selva
  • 53,910
  • 52
  • 193
  • 240
Music Monkey
  • 340
  • 4
  • 15
  • I've had R issues when the AndroidManifest.xml file and project.properties file within the project are not displaying the same target/minimum version of android. – Music Monkey Oct 22 '12 at 05:46
1

I run into this problem every time I switch computers and try to import old projects from files transferred via a USB.

My workaround is to just create a new project and copy (drag) the files into the IDE (currently using Netbeans) and rebuild. This is an annoyance and a bit of a hacky solution, but it fixes the problem.

If this happens to you, worst case is you might have to backup your files, delete the project, and just drag the files in there and recompile. Hopefully it won't come to that but that would be your nuclear option.

1

You may try

Android Studio top menu > File > Invalidate caches / restart...

Click on invalidate cache / restart button to restart your project

Resolve R.xxxx.xxx again if some of the fragment class R class didn't resolve properly

then rebuild your project

Hope it helps

Ethan Liew
  • 91
  • 1
  • 3
1

Just got rid of the error in my project. I had imported a sample project, I had changed the package folders but I had not updated the package in one of the java files.

Most likely cause of this error 'package R does not exist' is that the package name in Java or manifest file is incorrect. Make sure it is correct and in sync and then do a clean build.

Ajay B
  • 746
  • 9
  • 19
1

This error is 100% due to error in xml file. You can check that particular error in Logcat->error. and then solve that. If the xml error is solved the application would run. It's mostly arises when you copy a code from other source .In my case there was a error in Button in a xml file. I haven't typed Button correctly .If you solve that error your and your application would run smoothly. If yet it shows this error than don' worry and move forward.

1

finally found the solution.

  1. Go to File>Invalidate Caches
  2. Now "Check" Clear file system cache and Local History & Clear VCS Log caches and index
  3. Now Click on "INVALIDATE AND RESTART"
Raza
  • 57
  • 4
0

If you encounter this error in Android Studio:

Check the Gradle module file(s) -> defaultConfig -> applicationId setting.

Check the AndroidManifest.xml -> manifest package tag.

Check the package declarations in all src java files.

Sync, Clean then Rebuild with Gradle.

NEVER build your own R file. R is auto-generated from your source java files and build settings.

rask004
  • 552
  • 5
  • 15
0

I had: "error: package R does not exist" and assumed javac didn't have access to R.java.
So I appended %PROJ_LOC%\gen to sourcepath, and it worked! SOURCEPATH=%PROJ_LOC%\src;%PROJ_LOC%\gen

I'm not using Android Studio or Ant (or XML).

chatt
  • 45
  • 7
0

If this error appeared after resolving merge conflicts, simple Build -> Clean project could help.

Dmitry Smolyaninov
  • 2,159
  • 1
  • 18
  • 32
0

Sometimes, it gets solved when you just re-import the project into Android Studio.

Aung Pyae
  • 1,590
  • 2
  • 16
  • 25
0

Wrong path: Project "cashes" the pointers to the images and if you have made name changes to the path for example Refactored package or folders. Then just simply write the R letter again and the editor suggests the right path and it will work. In this case your filenames are right and the content that is referred in the R. pointer is present but the path is wrong, thus clean and build won't work.

Patrik Rikama-Hinnenberg
  • 1,362
  • 1
  • 16
  • 27
0

Another case of R. breakage is Annotations Processing.

Some processing could refer to classes located in certain folders or folder levels. If you move required classes to other location, you can get R. as an unknown class.

Unfortunately the error-pointer to this problem is not evident in Android Studio.

Zon
  • 18,610
  • 7
  • 91
  • 99
0

No benefit of writing R.java yourself because it is changed on every build,

Just remember to use R.something for example : R.raw.filename from inside classes that has package value similar to the package value inside the AndroidManifest.xml

because R. resources IDs are defined for the current application or library and they are all checked if exist on compile time, so does not make sense to allow them to be accessed from "code" that does not target the current application or library and can be used in other places.

Mustafa R.Mahdi
  • 744
  • 7
  • 11
0

I forgot to add the "name" of my "package" at the top of my java class. Check if yours is actually added.

0

This happened to me after I refactored the package name. I found that I needed to update rootProject.name = "your_app_name" in settings.gradle file. Once I did this the error went away.

SqueezeOJ
  • 441
  • 7
  • 17
-2

I solve My problem:

package R does not exist

.

Goto AndroidManifest.xml file and changed the minSDKVersion="17" from 19

BlackM
  • 3,927
  • 8
  • 39
  • 69
Fazal
  • 1
  • I beg to differ. You should not have minSDKVersion in AndroidManifest.xml file as per the current standards. If you have it then remove it from AndroidManifest.xml file it is redundant code. The minSDKVersion & targetSdkVersion should be defined in build.gradle file only. – Ajay B Jul 18 '17 at 14:34