/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 파일과 같은 미디어에 적합합니다.
다음은 몇 가지 주요 사항입니다.
- 원시 파일에는 유효한 Java 식별자가 있는 이름이 있어야 하지만 자산의 파일에는 위치 및 이름 제한이 없습니다.즉, 원하는 디렉토리로 그룹화할 수 있습니다.
- 원시 파일 xml뿐만 아니라 Java에서도 쉽게 참조할 수 있습니다(즉, 매니페스트 또는 다른 xml 파일에서 원시 파일을 참조할 수 있습니다).
- 자산/디렉토리가 아닌 여기에 자산 파일을 저장하는 방법은 http://developer.android.com/tools/projects/index.html 에 문서화된 대로 액세스하는 방법만 다릅니다.
- 라이브러리 프로젝트에 정의된 리소스는 라이브러리에 종속된 응용 프로그램 프로젝트로 자동으로 가져옵니다.자산의 경우 이러한 현상이 발생하지 않습니다. 자산 파일은 애플리케이션 프로젝트의 자산 디렉토리에 있어야 합니다.
- 자산 디렉토리는 파일 시스템이 원하는 파일을 저장할 수 있는 더 많은 자유를 제공하는 것과 비슷합니다.그런 다음 Java를 통해 파일 시스템에 있는 모든 파일에 액세스할 때처럼 해당 시스템의 각 파일에 액세스할 수 있습니다(예: 게임 데이터 파일, 글꼴, 텍스처 등).
- 리소스와 달리 자산은 자산 디렉토리의 하위 폴더로 구성할 수 있습니다. 그러나 자산을 사용하여 수행할 수 있는 유일한 작업은 입력 스트림을 가져오는 것입니다.따라서 문자열이나 비트맵을 자산에 저장하는 것은 그다지 의미가 없지만 입력 수정 사전이나 게임 맵과 같은 사용자 지정 형식의 데이터를 저장할 수 있습니다.
- Raw는 R.java 파일을 생성하여 컴파일 시간을 확인할 수 있지만, 데이터베이스를 개인 디렉토리에 복사하려면 스트리밍용으로 만들어진 자산을 사용할 수 있습니다.
결론
- Android API에는 다양한 모바일 앱의 대부분의 일반적인 사용 사례에 최적화된 매우 편안한 Resources 프레임워크가 포함되어 있습니다.리소스를 마스터하고 가능한 한 리소스를 사용하도록 노력해야 합니다.
- 그러나 특별한 경우를 위해 더 많은 유연성이 필요한 경우 리소스를 더 자유롭게 구성하고 처리할 수 있는 더 낮은 레벨의 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
'programing' 카테고리의 다른 글
Spring Boot에서 HTTP Post maxPostSize 증가 (0) | 2023.08.08 |
---|---|
JQuery로 CTRL+S를 캡처하는 최고의 크로스 브라우저 방법은 무엇입니까? (0) | 2023.08.08 |
Windows의 Git Shell: 패치의 기본 문자 인코딩은 UCS-2 리틀 엔디안입니다. BOM 없이 ANSI 또는 UTF-8로 변경하는 방법은 무엇입니까? (0) | 2023.08.08 |
열 주석이 있는 Oracle 테이블 생성 (0) | 2023.07.29 |
UI 텍스트 필드에서 텍스트 들여쓰기 (0) | 2023.07.29 |