답변:
리소스를 통해 여기에 설명 된대로 다양한 언어, OS 버전, 화면 방향 등에 대한 대안을 제공하기위한 기본 지원 기능이 있습니다 . 자산으로는 사용할 수 없습니다. 또한 API의 많은 부분에서 리소스 식별자 사용을 지원합니다. 마지막으로 리소스 이름은 컴파일 타임에 확인되는 상수 필드 이름으로 바뀌므로 코드와 리소스 자체간에 불일치가 발생할 가능성이 줄어 듭니다. 그 중 어느 것도 자산에 적용되지 않습니다.
그렇다면 왜 자산 폴더가 있습니까? 런타임에 사용하려는 자산을 계산하려면 매우 쉽습니다. 자원을 사용하면 사용할 수있는 모든 자원 ID 목록을 선언하고 색인을 목록으로 계산해야합니다. (개발주기에서 자원 세트가 변경되면 다소 어색하고 오류가 발생할 수 있습니다 getIdentifier
.) 또한 자원이 지원하지 않는 폴더 계층 구조로 구성됩니다. 데이터를 관리하는 다른 방법입니다. 자원이 대부분의 경우를 다루지 만 자산은 때때로 사용됩니다.
또 다른 차이점 : 라이브러리 프로젝트에 정의 된 리소스는 라이브러리에 의존하는 응용 프로그램 프로젝트로 자동으로 가져옵니다. 자산의 경우에는 발생하지 않습니다. 자산 파일은 응용 프로그램 프로젝트의 자산 디렉토리에 있어야합니다. [편집 : Android의 새로운 Gradle 기반 빌드 시스템 (Android Studio와 함께 사용)에서는 더 이상 사실이 아닙니다. 라이브러리 프로젝트의 자산 디렉토리는 .aar 파일로 패키지되므로 라이브러리 프로젝트에 정의 된 자산은 응용 프로그램 프로젝트로 병합됩니다 (따라서 /assets
참조 된 라이브러리에있는 경우 응용 프로그램의 디렉토리에있을 필요는 없습니다 ).
편집 : 응용 프로그램과 함께 사용자 정의 글꼴을 패키지하려는 경우 또 다른 차이점이 있습니다. 거기 API 호출 를 만들 Typeface
파일 시스템 또는 앱에 저장된 글꼴 파일에서 assets/
디렉토리. 그러나 디렉토리에 Typeface
저장된 글꼴 파일 res/
(또는 디렉토리 InputStream
사용을 허용 하는) 에서 API를 만들 수는 없습니다 res/
. [ 참고 : Android O (현재 알파 미리보기에서 사용 가능)를 사용하면 사용자 지정 글꼴을 리소스로 포함 할 수 있습니다. 이 기한이 지난 기능에 대한 설명은 여기 를 참조하십시오 . 그러나 최소 API 수준이 25 이하인 경우 사용자 지정 글꼴을 리소스가 아닌 자산으로 패키징해야합니다.]
raw/
디렉토리 의 파일에 쓸 수 있습니까?
/res
and '/ assets'디렉토리의 모든 항목은 .apk 파일로 패키지되어 있으므로 읽기 전용입니다.
둘 다 꽤 비슷합니다. 이 둘의 실제 주요 차이점은 res
디렉토리에서 각 파일에 사전 컴파일 된 파일이 ID
있으며,이를 통해 쉽게 액세스 할 수 있습니다 R.id.[res id]
. 이미지, 사운드, 아이콘에 빠르고 쉽게 액세스 할 수 있습니다.
assets
디렉토리는 많은 파일 시스템처럼 당신이 거기에 원하는 모든 파일을 넣어 더 많은 자유를 제공합니다. 그런 다음 Java를 통해 파일 시스템의 파일에 액세스 할 때와 같이 해당 시스템의 각 파일에 액세스 할 수 있습니다. 이 디렉토리는 게임 세부 정보, 사전 등과 같은 것들에 좋습니다. 희망이 도움이됩니다.
Assets
폴더에 글꼴을 넣을 필요가 없습니다 . Android 시스템에는 이제 fonts
디렉토리 가 포함되어 있으며 여기에 사용자 정의 글꼴 파일을 넣거나 Android Studio에서 다운로드 할 수 있습니다.
나는 이것이 오래된 것을 알고 있지만, 분명히하기 위해 공식 안드로이드 문서에 각각에 대한 설명이 있습니다.
에서 http://developer.android.com/tools/projects/index.html
assets/
비어 있습니다. 원시 자산 파일을 저장하는 데 사용할 수 있습니다. 여기에 저장 한 파일은 그대로 .apk 파일로 컴파일되며 원래 파일 이름이 유지됩니다. URI를 사용하여 일반 파일 시스템과 동일한 방식으로이 디렉토리를 탐색하고 AssetManager를 사용하여 파일을 바이트 스트림으로 읽을 수 있습니다. 예를 들어, 이것은 텍스처와 게임 데이터를위한 좋은 위치입니다.
res/raw/
임의의 원시 자산 파일의 경우. 자산 / 디렉토리 대신 여기에 자산 파일을 저장하면 액세스하는 방식 만 다릅니다. 이러한 파일은 aapt에 의해 처리되며 R 클래스의 리소스 식별자를 사용하여 응용 프로그램에서 참조되어야합니다. 예를 들어, MP3 또는 Ogg 파일과 같은 미디어에 적합합니다.
다음은 몇 가지 핵심 사항입니다.
결론
자바 코드 어딘가에서 그것들을 참조해야한다면, 파일을 "res"디렉토리에 넣을 것이다.
그리고 res 폴더의 모든 파일은 R 파일에서 색인화되므로 훨씬 빠르고 쉽게로드 할 수 있습니다.
테드 홉 (Ted Hopp)은 이에 대해 꽤 잘 대답했다. opengl 텍스처 및 쉐이더 파일에 res / raw를 사용하고 있습니다. 계층 적 조직을 제공하기 위해 그것들을 자산 디렉토리로 옮기는 것에 대해 생각하고있었습니다.
이 스레드는하지 말라고 확신했습니다. 첫째, 고유 한 리소스 ID를 사용하는 것이 좋습니다. 두 번째는 InputStream / openRawResource 또는 BitmapFactory를 사용하여 파일을 읽는 것이 매우 간단하기 때문입니다. 셋째, 휴대용 라이브러리에서 사용할 수 있기 때문에 매우 유용합니다.
자산은 응용 프로그램에 텍스트, XML, 글꼴, 음악 및 비디오와 같은 임의의 파일을 포함하는 방법을 제공합니다. 이러한 파일을 "리소스"로 포함하려고하면 Android가 해당 파일을 리소스 시스템으로 처리하여 원시 데이터를 가져올 수 없습니다. 손대지 않은 데이터에 액세스하려면 자산을 사용하는 것이 좋습니다.
res/raw
사용하여 원시 데이터를 얻을 수 있습니다 openRawResource(resourceName)
.
res
자원을 의미하는 것은 무엇을assets
의미 하는가 ??