나는 안드로이드 연구의 한가운데에 있으며 자산과 원시 자원을 방금 다루었습니다. Raw resources vs. Assets를 사용하는 이유를 이해하려고합니다.
-
둘 다 컴파일되지 않은 리소스 입력 스트림을 제공합니다.
-
자산은 원시 자원보다 훨씬 더 많은 유연성과 기능을 제공하는 것으로 보입니다.
ㅏ. 아래에서 폴더 구조를 만들 수
assets
있지만 아래에서 만들 수는 없습니다.raw
비.
assets
폴더에있는 것이 아니라 폴더 에 모든 리소스를 동적으로 나열 할 수 있습니다raw
.
그렇다면 왜 Android에서 Raw 리소스를 사용해야합니까?
답변
사이의 주요 차이점 raw
폴더와 assets
폴더.
-
raw는 리소스 (res)의 하위 폴더이므로 Android는
ID
그 안에있는 모든 파일을 자동으로 생성 합니다. 이것은
ID
다음에 저장되어있는R class
이 쉽게 다른 안드로이드 클래스와 메소드에서, 심지어 안드로이드 XML 파일에 액세스 할 수 있습니다 의미하는 파일에 대한 참조 역할을 것이다. 자동 생성 된 ID를 사용하는 것이 Android에서 파일에 액세스하는 가장 빠른 방법입니다. -
assets
폴더가있다 “부록” 디렉토리. R 클래스 ID를 생성하지 않습니다 일부 안드로이드 클래스와 메소드 덜 호환이 배치 파일에 있습니다. String을 기반으로assets
폴더에 대한 핸들을 가져와야 하므로 폴더의 파일 액세스 속도가 느려집니다 . 그러나 데이터베이스 파일을 시스템 메모리에 복사하는 것과 같이이 폴더에 파일을 저장하면 일부 작업이 더 쉽게 수행됩니다. Assets 폴더 안의 파일에 대한 Android XML 참조를 만드는 쉬운 방법은 없습니다.
답변
로부터 안드로이드 문서 의 raw/
디렉토리가 사용됩니다 :
원시 파일로 저장할 임의의 파일. 원시 InputStream으로 이러한 자원을 열려면 자원 ID ( R.raw.filename ) 로 Resources.openRawResource () 를 호출 하십시오 .
그러나 원래 파일 이름과 파일 계층에 액세스해야하는 경우 res / raw / 대신
assets/
디렉토리에 일부 자원을 저장하는 것을 고려할 수 있습니다 . asset /의 파일 에는 자원 ID가 제공되지 않으므로 AssetManager를 통해서만 읽을 수 있습니다 .
한 라인에서의 파일 raw/
디렉토리가되는 플랫폼에서 컴파일되지 , 리소스 ID를 할당 하고 하위 폴더로 그룹화 할 수 없습니다 당신이 원하는 경우 그렇지 않으면 사용하는 반면, assets/
디렉토리.
답변
위에 주어진 답변에 추가하는 중 …
/ res / strings, / res / layout, / res / xml 파일 등은 모두 이진 형식으로 컴파일됩니다. 그러나 XML 파일을 포함한 파일을 / res / raw / 디렉토리에 배치하면 이진 형식으로 컴파일되지 않습니다.
원시 자원보다 자산을 사용하는 것의 큰 장점 중 하나는
file:///android_asset/
Uri 접두사입니다. 이는 자산을 WebView에로드하는 데 유용합니다. 예를 들어 프로젝트 내 asset / foo / index.html에있는 자산에 액세스하기 위해loadUrl("file:///android_asset/foo/index.html")
해당 HTML을 WebView에로드하는 것을 호출 할 수 있습니다
.