/ res와 / assets 디렉토리의 차이점 있다는 것을 알고

자산이 파일 시스템처럼 작동하는 동안 res디렉토리의 파일에 액세스 할 수 있다는 것을 알고 R.class있지만 일반적으로 하나를 사용하는 것이 가장 좋은시기를 알고 싶습니다.
res와 자산의 실제 차이점을 아는 사람이 있습니까?



답변

리소스를 통해 여기에 설명 된대로 다양한 언어, OS 버전, 화면 방향 등에 대한 대안을 제공하기위한 기본 지원 기능이 있습니다 . 자산으로는 사용할 수 없습니다. 또한 API의 많은 부분에서 리소스 식별자 사용을 지원합니다. 마지막으로 리소스 이름은 컴파일 타임에 확인되는 상수 필드 이름으로 바뀌므로 코드와 리소스 자체간에 불일치가 발생할 가능성이 줄어 듭니다. 그 중 어느 것도 자산에 적용되지 않습니다.

그렇다면 왜 자산 폴더가 있습니까? 런타임에 사용하려는 자산을 계산하려면 매우 쉽습니다. 자원을 사용하면 사용할 수있는 모든 자원 ID 목록을 선언하고 색인을 목록으로 계산해야합니다. (개발주기에서 자원 세트가 변경되면 다소 어색하고 오류가 발생할 수 있습니다 getIdentifier.) 또한 자원이 지원하지 않는 폴더 계층 구조로 구성됩니다. 데이터를 관리하는 다른 방법입니다. 자원이 대부분의 경우를 다루지 만 자산은 때때로 사용됩니다.

또 다른 차이점 : 라이브러리 프로젝트에 정의 된 리소스는 라이브러리에 의존하는 응용 프로그램 프로젝트로 자동으로 가져옵니다. 자산의 경우에는 발생하지 않습니다. 자산 파일은 응용 프로그램 프로젝트의 자산 디렉토리에 있어야합니다. [편집 : Android의 새로운 Gradle 기반 빌드 시스템 (Android Studio와 함께 사용)에서는 더 이상 사실이 아닙니다. 라이브러리 프로젝트의 자산 디렉토리는 .aar 파일로 패키지되므로 라이브러리 프로젝트에 정의 된 자산은 응용 프로그램 프로젝트로 병합됩니다 (따라서 /assets참조 된 라이브러리에있는 경우 응용 프로그램의 디렉토리에있을 필요는 없습니다 ).

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


답변

둘 다 꽤 비슷합니다. 이 둘의 실제 주요 차이점은 res디렉토리에서 각 파일에 사전 컴파일 된 파일이 ID 있으며,이를 통해 쉽게 액세스 할 수 있습니다 R.id.[res id]. 이미지, 사운드, 아이콘에 빠르고 쉽게 액세스 할 수 있습니다.

assets디렉토리는 많은 파일 시스템처럼 당신이 거기에 원하는 모든 파일을 넣어 더 많은 자유를 제공합니다. 그런 다음 Java를 통해 파일 시스템의 파일에 액세스 할 때와 같이 해당 시스템의 각 파일에 액세스 할 수 있습니다. 이 디렉토리는 게임 세부 정보, 사전 등과 같은 것들에 좋습니다. 희망이 도움이됩니다.


답변

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

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

assets/

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

res/raw/

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


답변

다음은 몇 가지 핵심 사항입니다.

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

결론

  1. Android API에는 다양한 모바일 앱의 가장 일반적인 사용 사례에 최적화 된 매우 편안한 리소스 프레임 워크가 포함되어 있습니다. 리소스를 마스터하고 가능한 한 사용하십시오.
  2. 그러나 특별한 경우에 더 많은 유연성이 필요한 경우 자산에는 더 높은 수준의 자유로 리소스를 구성하고 처리 할 수있는 낮은 수준의 API가 제공됩니다.

답변

자바 코드 어딘가에서 그것들을 참조해야한다면, 파일을 “res”디렉토리에 넣을 것이다.

그리고 res 폴더의 모든 파일은 R 파일에서 색인화되므로 훨씬 빠르고 쉽게로드 할 수 있습니다.


답변

파일 시스템과 같은 자산을 사용하여 모든 종류의 파일을 덤프하십시오. 그리고 res를 사용하여 만들어진 것, 레이아웃, 이미지, 값을 저장하십시오.


답변

테드 홉 (Ted Hopp)은 이에 대해 꽤 잘 대답했다. opengl 텍스처 및 쉐이더 파일에 res / raw를 사용하고 있습니다. 계층 적 조직을 제공하기 위해 그것들을 자산 디렉토리로 옮기는 것에 대해 생각하고있었습니다.

이 스레드는하지 말라고 확신했습니다. 첫째, 고유 한 리소스 ID를 사용하는 것이 좋습니다. 두 번째는 InputStream / openRawResource 또는 BitmapFactory를 사용하여 파일을 읽는 것이 매우 간단하기 때문입니다. 셋째, 휴대용 라이브러리에서 사용할 수 있기 때문에 매우 유용합니다.