[android] Android의 클래스 R은 무엇입니까?

AndroidStudio에서 빈 활동을 사용하여 프로젝트를 만들 때 MainActivity.java파일 에 다음 코드가 표시 됩니다.

package my.company.my_proj;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

명명 된 비밀 클래스 R가 사용되는 곳. 이 수업의 목적은 무엇입니까 R?



답변

R특정 응용 프로그램 패키지의 모든 리소스에 대한 정의를 포함하는 클래스 입니다. 응용 프로그램 패키지네임 스페이스에 있습니다.

당신이 당신의 매니페스트 패키지 이름을 말한다면, 예를 들면 com.foo.bar, R클래스는 모든 자원의 상징으로 생성됩니다 com.foo.bar.R.

일반적으로 다루게 될 두 가지 R 클래스가 있습니다.

  1. android.R및 의 프레임 워크 리소스
  2. 자신의 네임 스페이스에서

그것은 R esources R를 의미하기 때문에 이름이 붙여 졌고, 사람들이 무언가를 더 길게 타자 하는 것은 의미 가 없습니다.


답변

R이란 무엇입니까 : R에
대해 매우 신비한 것은 없습니다. 정적 하위 클래스가 많고 이클립스에서 열어서 살펴 보는 클래스입니다 (gen / 아래에 있음).

이 클래스의 모든 멤버는 1) 정적 최종 클래스 또는 2) 해당 클래스의 다른 멤버와 관련하여 고유 한 정적 최종 정수 중 하나입니다.

왜 그렇게 비밀 스럽습니까?
R은 개미에 의해 자동으로 생성되기 때문에 혼동되기 쉽습니다. 수동으로 “접촉”해서는 안되기 때문에 그 비밀이 있습니다 (물론 할 수 있지만 변경 사항은 재생성시 자동으로 지워집니다). 때로는 eclipse가 Android 표준 R 파일을 자동으로 가져 오기 때문에 (위의 답변에서 논의한 바와 같이) 추가적으로 암호화되어 있습니다.

왜 항상 해결할 수없는 첫 번째 문제입니까? R은 Java 클래스 및 패키지의 규칙을 정확히 따르고, R이 가져 오기와 관련하여 작동하는 방식 에는 특별한 것이 없습니다 . R은 매니페스트 파일의 패키지 항목에 지정된 패키지에 자동으로 배치됩니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="package.which.will.contain.R.and.probably.the.main.package.in.the.application" android:versionName="8.6.2011" android:versionCode="1">
    <uses-sdk android:minSdkVersion="13" />

R 파일이 속한 패키지를 보려면 eclipse (패키지보기)에서 gen / 폴더를여십시오. 여기에 하나의 패키지가 나열되고 매니페스트에 지정한 이름이 표시됩니다. 삭제를 시도하면 모든 리소스가 올바른 이름 지정 규칙을 따르고 모든 xml 파일이 올바른 xml 규칙을 따르고 Eclipse에서 빌드가 자동 으로 활성화되면 다시 나타납니다.

R 파일을 이해하는 데있어 핵심은 “main”패키지에 속한 다른 파일과는 다른 디렉토리에 있더라도 다른 클래스와 동일한 패키지에 있다는 것을 인식하는 것입니다. 이것을 이해하고 리소스 파일의 구문과 이름을 이해하면 R 문제를 해결하는 것은 쉽습니다.


답변

R은 리소스의 이름입니다. 액세스하는 모든 리소스 R.$FOLDER.$RESOURCE또는 매우 유사한 것.

확인할 수없는 경우 경로가 올 바르고 참조 된 리소스가 있는지 확인합니다 (대소 문자 구분, 확장자 포함).

또한 혼란스러운 부분은 (어쨌든 나에게) 두 개의 다른R 것이 있다는 것 입니다. “해결할 수 없음”오류가 많이 발생하는 경우 가져 오는 항목을 확인하십시오. 변경하거나 제거하십시오. 또는 프로젝트를 정리해 볼 수 있습니다 (경고 : 때로는 상황이 이미있는 것보다 더 나빠질 수 있습니다).


답변

Android R.java는 res / directory의 모든 리소스에 대한 리소스 ID를 포함하는 AAPT (Android Asset Packaging Tool)에서 자동 생성 한 파일입니다. activity_main.xml 파일에 컴포넌트를 생성하면 해당 컴포넌트의 id가 자동으로 생성됩니다. 이 ID는 활동 소스 파일에서 구성 요소에 대한 조치를 수행하는 데 사용할 수 있습니다.


답변