반응형

에셋 파일은 읽기만 가능합니다. APK 만들어질 때 같이 포함됩니다.

에셋은 압축 파일 GIF PNG JPG MP3... 등은 압축하지 않지만

그 외 파일들은 자동 압축을 합니다.

 

압축하지 않는 파일들은 아래와 같이 정의되어 있습니다.

static const char* kNoCompressExt[] = { ".jpg", ".jpeg", ".png", ".gif", ".wav", ".mp2", ".mp3", ".ogg", ".aac", ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", ".rtttl", ".imy", ".xmf", ".mp4", ".m4a", ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2", ".amr", ".awb", ".wma", ".wmv" };

 

 

압축을 하지 않으려면 원하는 확장자를

build.gradle(Module에 선언해 주어야 합니다)


안드로이드 스튜디오  이구아나 2023년 버전에선 아래와 같은 방식으로 설정해 줘야 합니다.

aaptOptions{
    noCompress +="wsm"
    noCompress +="am3"

}


 

모든 파일을 압축하지 않고 에셋에 보관할려면 위와같이 해줍니다.

 

압축하지 않은 확장자는 에셋 명령 open 대신 openFD를 사용합니다.

 

 

압축하지 않을때 장점은 데이터 읽을때 압축 하는 과정을 거치지 않으니

읽기 속도가 빠르고 CPU 부하가 적습니다.

(mp3.gif.mp4...이런 파일은 이미 압축되어 있는 파일이니 제외..)

 

압축하지 않을때 단점은 APK 만들때 압축하지 않은만큼 크기가 커지는 것입니다.

 

압축하지 않는 파일은 자신만의 간단하고 빠른 압축 알고리즘을 사용하는것도 좋을것 같습니다.


오래전엔 파일당 1M 제한 크기가 였지만

2020년 현제 이미지 오디오 일반 파일 등은 10M까지,

비디오 파일은 100M까지 업로드되지만 서비스엔 제약이 있습니다.

support.google.com/richmedia/answer/151822?hl=en

 


에셋 폴더 만들기

 

APP에서 우클릭 위 순서대로 에셋 파일을 폴더를 만듭니다.


assets,  text 파일 만들어 출력해 보기

 

보통 윈도우에서 파일을 복사해 붙여 넣기 하지만 여기선 연습이라.

txt 파일을 만들어 읽어 보겠습니다.

 

assets 폴더에서 우클릭해서 위처럼 파일 만들기를 합니다.

 

 

연습 용으로 a.txt를 만듭니다.

 

 

만든 a.txt 파일  편집창이  아무 글이나 적어 봅니다. 

x를 눌러 창을 닫습니다.

 

 

안드로이드 기본 프로그램이 뜬 상태에서 

MainActivity 안에  위 소스를 입력해 실행하면 방금 만든 a.txt를 읽어 출력해 줍니다.


 assets에 하위 폴더를 만들었을 때 폴더 지정은 위와 같이 합니다.


다른 파일 Class에서 assets 객체를 사용할 시는 MainActivity에서 Context를 넘겨줘야 합니다.

 

다른 파일의 Class 정의 부분

 

 

MainActivity에서 호출 시

this는 Context를 뜻합니다.


인디 게임 같은 걸 만들다 보면 바이러니 파일을 읽어야 할 경우가 자주 생깁니다.

에셋으로 바이러니 파일 읽기 예제입니다. (MainActivity 내부에 작성하면 됩니다)

 

skip() 몇 파이트를 건너뛰어서 읽는다는 뜻인데 파일의 포인터로 생각하면 쉽습니다.

 

read( 버퍼 , 버퍼에서 위치 (offset 보통 0) , 읽을 길이)

 

 

c.bin 은 0부터 9까지 순서대로 입력되어있는 바이러니 예제 파일입니다.

위 소스에서 테스트 할시는 assets에 data 폴더를 만들어 이 파일을 복사해서 넣으면 됩니다.

c.bin
0.00MB


파일에 있는 01 02 03 04 순서의 바이러니 데이터를 integer형식으로 읽는다고 했을 때 

x86 형식은 03040102 로 읽혀 집니다

하지만 안드로이드에서 getInt 로 읽으면 01020304 순서대로 읽습니다.

이게 안드로이드 형식인지 내부 함수에서 조정해서 이렇게 된 건진 모르겠지만

(JVM에서 관리 처리 합니다.JVM에서 읽고  방법을 선택하는 것임)

x86 형식으로 읽으려면 버퍼를 할당할 때 위와 같이 추가해줍니다.

 

 

 

반응형

+ Recent posts