In android R.java is used to provide access to resources defined in XML files.
To access the resource we need to invoke findViewById() method passing in the id
Biggest advantage is in Localization and Providing alternate resources for different screen sizes.
e.g you can have a String resource R.string.myname this could be a defined in english in /values-en/strings.xml and in spanish in /values-es/strings.xml
System will take care or picking up the right file depending on the locale you just need to use @string/myname in your layout file or R.string.myname in your code.
Similarly you could have two layout files for portrait and landscape defined in
res/layout/mylayout.xml
res/layout-land/mylayout.xml
In your code you will just specify R.layout.mylayout to inflate the layout. Resource manager picks up the file in layout-land if the device is in landscape mode.
Doing this manually would be a nightmare -- hence the need for R file