programing

/res 디렉토리와 /asset 디렉토리 간의 차이

css3 2023. 8. 8. 21:44

/res 디렉토리와 /asset 디렉토리 간의 차이

나는 그 파일들을 알고 있습니다.res는 디토리액수있다니에서 수 .R.class자산이 파일 시스템처럼 작동하는 반면, 일반적으로 어느 시점에 하나를 사용하는 것이 가장 좋은지 알고 싶습니다.
레스와 자산의 실질적인 차이를 아는 데 도움을 줄 수 있는 사람이 있습니까?

리소스를 사용하면 다양한 언어, OS 버전, 화면 방향 등에 대한 대안을 제공할 수 있습니다.그 중 어느 것도 자산과 함께 사용할 수 없습니다.또한 API의 많은 부분에서 리소스 식별자 사용을 지원합니다.마지막으로 리소스 이름은 컴파일 시 확인되는 상수 필드 이름으로 바뀌므로 코드와 리소스 자체가 일치하지 않을 수 있습니다.자산에는 해당되지 않습니다.

그렇다면 왜 자산 폴더가 있는 걸까요?런타임에 사용할 자산을 계산하려면 매우 쉽습니다.리소스를 사용할 경우 사용할 수 있는 모든 리소스 ID 목록을 선언하고 목록에 인덱스를 계산해야 합니다.(이것은 좀 어색하고 개발 주기에서 리소스 집합이 변경되면 오류가 발생할 수 있습니다.) (편집: 를 사용하여 이름으로 리소스 ID를 검색할 수 있지만 컴파일 시간 확인의 이점이 사라집니다.)리소스에서 지원하지 않는 폴더 계층으로 자산을 구성할 수도 있습니다.이것은 데이터를 관리하는 다른 방법입니다.리소스가 대부분의 경우를 커버하지만 자산은 때때로 사용됩니다.

또 다른 차이점은 라이브러리 프로젝트에 정의된 리소스가 라이브러리에 종속된 응용 프로그램 프로젝트로 자동으로 가져온다는 것입니다.자산의 경우에는 그렇지 않습니다. 자산 파일은 애플리케이션 프로젝트의 자산 디렉토리에 있어야 합니다.[EDIT: Android의 새로운 Gradle 기반 빌드 시스템(Android Studio와 함께 사용)으로 인해 더 이상 사실이 아닙니다.라이브러리 프로젝트의 자산 디렉토리는 .aar 파일로 패키징되므로 라이브러리 프로젝트에 정의된 자산은 애플리케이션 프로젝트에 병합됩니다(따라서 애플리케이션의 프로젝트에 존재할 필요가 없음)./assets디렉터리(참조 라이브러리에 있는 경우)].

편집: 사용자 정의 글꼴을 앱과 함께 패키지화하려면 또 다른 차이점이 있습니다.다음을 생성하기 위한 API 호출이 있습니다.Typeface의 파일시또앱에 assets/디렉토리입니다. 그나생가 API없습다를 수 .Typeface에 된 글꼴 res/ ▁an()▁()에서)InputStream그것은 사용을 허용할 것입니다.res/디렉토리)를 선택합니다.[참고: Android O(현재 알파 미리 보기에서 사용 가능)를 사용하면 사용자 지정 글꼴을 리소스로 포함할 수 있습니다.기한이 지난 이 기능에 대한 설명을 여기에서 참조하십시오.그러나 최소 API 레벨이 25 이하인 경우에는 사용자 지정 글꼴을 리소스가 아닌 자산으로 패키징해야 합니다.]

둘 다 꽤 비슷합니다. 차이점은 에 있다는 입니다.res 각 설정된 파일이 됩니다.ID를 통해 쉽게 액세스할 수 있습니다.R.id.[res id]이 기능은 이미지, 소리, 아이콘에 빠르고 쉽게 액세스하는 데 유용합니다.

assets디렉터리는 파일 시스템에 더 가깝고 원하는 파일을 저장할 수 있는 더 많은 자유를 제공합니다.그런 다음 Java를 통해 모든 파일 시스템의 파일에 액세스할 때처럼 해당 시스템의 각 파일에 액세스할 수 있습니다.는 게임 세부 사항,에 좋습니다.

이것이 오래된 것이라는 것을 알지만, 분명히 하기 위해 공식 안드로이드 설명서에는 각각의 설명이 있습니다.

http://developer.android.com/tools/projects/index.html 에서

assets/

이것은 비어 있습니다.원시 자산 파일을 저장하는 데 사용할 수 있습니다.여기에 저장한 파일은 그대로 .apk 파일로 컴파일되고 원래 파일 이름이 보존됩니다.URI를 사용하는 일반 파일 시스템과 동일한 방법으로 이 디렉터리를 탐색하고 Asset Manager를 사용하여 파일을 바이트 스트림으로 읽을 수 있습니다.예를 들어 텍스처 및 게임 데이터를 저장하기에 적합한 위치입니다.

res/raw/

임의 원시 자산 파일의 경우.자산/디렉토리가 아닌 여기에 자산 파일을 저장하는 것은 액세스 방법만 다를 뿐입니다.이러한 파일은 apt에 의해 처리되며 R 클래스의 리소스 식별자를 사용하여 응용 프로그램에서 참조해야 합니다.예를 들어 MP3 또는 Ogg 파일과 같은 미디어에 적합합니다.

다음은 몇 가지 주요 사항입니다.

  1. 원시 파일에는 유효한 Java 식별자가 있는 이름이 있어야 하지만 자산의 파일에는 위치 및 이름 제한이 없습니다.즉, 원하는 디렉토리로 그룹화할 수 있습니다.
  2. 원시 파일 xml뿐만 아니라 Java에서도 쉽게 참조할 수 있습니다(즉, 매니페스트 또는 다른 xml 파일에서 원시 파일을 참조할 수 있습니다).
  3. 자산/디렉토리가 아닌 여기에 자산 파일을 저장하는 방법은 http://developer.android.com/tools/projects/index.html 에 문서화된 대로 액세스하는 방법만 다릅니다.
  4. 라이브러리 프로젝트에 정의된 리소스는 라이브러리에 종속된 응용 프로그램 프로젝트로 자동으로 가져옵니다.자산의 경우 이러한 현상이 발생하지 않습니다. 자산 파일은 애플리케이션 프로젝트의 자산 디렉토리에 있어야 합니다.
  5. 자산 디렉토리는 파일 시스템이 원하는 파일을 저장할 수 있는 더 많은 자유를 제공하는 것과 비슷합니다.그런 다음 Java를 통해 파일 시스템에 있는 모든 파일에 액세스할 때처럼 해당 시스템의 각 파일에 액세스할 수 있습니다(예: 게임 데이터 파일, 글꼴, 텍스처 등).
  6. 리소스와 달리 자산은 자산 디렉토리의 하위 폴더로 구성할 수 있습니다. 그러나 자산을 사용하여 수행할 수 있는 유일한 작업은 입력 스트림을 가져오는 것입니다.따라서 문자열이나 비트맵을 자산에 저장하는 것은 그다지 의미가 없지만 입력 수정 사전이나 게임 맵과 같은 사용자 지정 형식의 데이터를 저장할 수 있습니다.
  7. Raw는 R.java 파일을 생성하여 컴파일 시간을 확인할 수 있지만, 데이터베이스를 개인 디렉토리에 복사하려면 스트리밍용으로 만들어진 자산을 사용할 수 있습니다.

결론

  1. Android API에는 다양한 모바일 앱의 대부분의 일반적인 사용 사례에 최적화된 매우 편안한 Resources 프레임워크가 포함되어 있습니다.리소스를 마스터하고 가능한 한 리소스를 사용하도록 노력해야 합니다.
  2. 그러나 특별한 경우를 위해 더 많은 유연성이 필요한 경우 리소스를 더 자유롭게 구성하고 처리할 수 있는 더 낮은 레벨의 API를 제공하는 자산이 있습니다.

Java 코드의 어딘가에서 파일을 참조해야 할 경우 "res" 디렉토리에 파일을 추가해야 합니다.

또한 res 폴더의 모든 파일이 R 파일에 인덱싱되므로 로드 속도가 훨씬 빨라집니다.

파일 시스템과 같은 자산을 사용하여 모든 종류의 파일을 덤프합니다.또한 res를 사용하여 레이아웃, 이미지, 값 등을 저장할 수 있습니다.

Ted Hopp는 이것에 꽤 잘 대답했습니다.저는 opengl 텍스처와 셰이더 파일에 res/raw를 사용해 왔습니다.계층적 조직을 제공하기 위해 자산 디렉토리로 이동하는 것에 대해 생각하고 있었습니다.

이 실타래는 제가 그렇게 하지 않도록 설득했습니다.첫째, 고유한 리소스 ID를 사용하는 것을 좋아하기 때문입니다.두 번째 이유는 InputStream/openRawResource 또는 BitmapFactory를 사용하여 파일을 읽는 것이 매우 간단하기 때문입니다.셋째, 휴대용 도서관에서 사용할 수 있는 것이 매우 유용하기 때문입니다.

자산을 사용하면 응용 프로그램에 텍스트, xml, 글꼴, 음악 및 비디오와 같은 임의 파일을 포함할 수 있습니다.이러한 파일을 "리소스"로 포함하려고 하면 Android가 해당 파일을 리소스 시스템으로 처리하므로 원시 데이터를 가져올 수 없습니다.손대지 않은 데이터에 액세스하려면 자산을 사용하는 것이 한 방법입니다.

언급URL : https://stackoverflow.com/questions/5583608/difference-between-res-and-assets-directories