출처 - http://gameforfun.tistory.com/entry/Google-Expansion-File-%EC%84%A4%EB%AA%85
http://developer.android.com/google/play/expansion-files.html
구글은 다른 곳과는 달리 apk 에 50MB라는 제한이 걸려있는데
이를 해결하는 방법으로는
1. 어플리케이션에서 우리가 만든 서버에 접속해서 데이터 파일들을 읽거나
2. Google에서 제공하는 Expansion을 사용한다.
로 나뉠 수 있다.
지금 여기서 설명할 것은 2번이다.
Overview
- 개발자가 apk를 업로드할 떄 추가적인 2개의 expansion file을 각각 2GB씩 추가로 올릴 수 있다.(즉, 총 4GB 사용 가능)
첫번째 expansion file은 Main expansion file이라 부르는데, 여기에 중요한 데이터들을 넣어주면 된다.
두번째 expansion file은 patch expansion file이라 부르고, 여기에는 사소한 업데이트에 사용되는 이미지들을 넣어주는 용도로 사용된다.
물론 두개는 엄격한 기준이 아니지만, 위 사이트에서는 다음과 같은 것을 지켜주라고 언급한다.
Main Expansion File은 중요한 데이터들을 넣고, 아주 가끔씩 업데이트된느 파일들을 넣어주고,
Patch Expansion FIle은 ...? 뭐지;;; patching이 자동적으로 안된다는데....
주의할 것은 따로 expansion file만 올릴 수 있는게 아니라, expansion file을 다시 올리기 위해서는 새로운 APK를 같이 업데이트 해줘야 된다는 것이다. (?)
File name format
- 각각의 expansion file은 아무 포맷이나 사용 가능하다(ZIP, PDF, MP4, etc)
파일 타입에 따라 상관 없이 Google Play는 다음과 같은 방식(?)으로 파일을 바꾼다.
[main | patch].<expansion-version>.<package-name>.obb
ex) main expansion file의 버젼이 314159이고 앱의 package-name이 com.example.app이라면 main expansion의 이름은
main.314159.com.example.app.obb
Storage location
- Google Play가 Expansion file을 기기에 다운로드할 때 그 위치는 시스템에서 공유되는 저장 공간에 저장이 된다(system's shared storage). 정상적으로 작동하기 위해서는 expansion file을 강제적으로 움직이거나, 기우거나, 이름을 변경해서는 안되며,
여러분의 앱이 expansion fiile을 google play 에서 수동적으로 다운로드를 해야하는 일이 발생하면, 다음과 같은 위치에 저장해야 된다.
<shared-storage>/Android/obb/<package-name>/
<shared-storage>는 getExternalStorageDirectory()로 부터 받아올 수 있다.
<package-name>은 여러분이 만든 application의 package-name이고, getPackageName()으로 불러올 수 있다.
위의 경로에는 항상 2개의 expansion file만 존재한다. Main과 Patch이고, 이것들은 apk를 새로 다운받으면 자동적으로 업데이트가 된다.
expansion file에 들어있는 데이터들을 unpack해야 된다면, .obb파일은 절대로 지워서는 안된고, unpack 된 데이터들을 같은 폴더에 넣어놓지 말고, 다른 위치에다 저장을 시켜야 된다. getExternalFilesDir()을 통해 unpacked된 데이터들을 저장해야 되는데, 가능하다면 unpack을 안하고 데이터를 읽는 형태를 권장한다. 가령 .zip파일에서 데이터를 바로 읽을 수 있는 라이브러리를 제공하니 걱정하지 않아도 됩니다.
주의: apk파일과는 다르게 shared storage에 있는 데이터들은 다른 application에서 읽기가 가능합니다.
팁: 위에서 언급한 zip 파일을 unpack하지 않고 읽기 위해서는 compression을 이용한 압축을 사용하면 안됩니다. compression을 사용하지 않는 압축은 zip -n 을 앞에 붙여 압축해야합니다.
Download process
- 대부분은 Google Play가 apk를 다운로드할떄 expansion file들을 함께 다운로드 해줍니다. 그러나 가끔씩 google play에서 다운로드 하지 못하는 경우가 생기는데, 이러한 경우에는 개발자가 직접 이전파일을 지우고 새로운 expansion file들을 다운로드 해 줘야됩니다. Expansion file의 다운로드는 Google Play에서 제공되는 URL에서 다운받을 수 있습니다.
다운로드의 과정은 다음과 같습니다:
1. 사용자는 google play에서 앱을 설치.
2. Google Play에서 expansion file을 다운로드 가능한 상태라면 apk와 함꼐 자동으로 다운로드가 실행. 아니라면 apk만 다운로드
3. 사용자가 앱을 실행시키면 앱이 expansion file들이 device에 존재하는지 확인을 해주고,
3-1. 있다면, 앱을 실행
3-2. 없다면, expansion file들을 구글플레이에서 다운로드 받아야 됩니다. 앱에서 Google Play에 Google Play's application licensing service를 이용해서 요청을 보내는데, 받아오는 자료는 파일 이름, 사이즈, url을 얻어옵니다. 해당 정보들로 expansion file을 다운받으면 됩니다.
Development checklist
- 여러분이 개발을 해야할때 확인해야 할 사항들을 나열해 보도록 하죠
1. 여러분의 앱이 50MB를 꼭 넘어야 되는지 확인해 봅시다. 다양한 사이즈에 맞춰야되는 경우, 더 좋은 그래픽 리소스를 사용하는 경우 등은 새로운 apk를 만들어서 여러 apk를 등록시키는 방법이 존재하니 알아두시면 되겠습니다.
2. 어떤 데이터들을 apk에서 분리시킬지 정하십시오. 보통은 patch expansion file을 main expansion file을 업데이트 하기 위해 사용하는 것이 좋지만, main expansion 파일이 2gb가 넘어간다면 path expansion file을 main expansion file처럼 사용해도 문제 없습니다.
3. 어플리케이션을 개발할때 외부의 리소스를 사용하도록 개발하십시오. 그리고 웬만하면 .zip을 사용하세요.
4. 앱의 실행부분에 expansion file이 존재하는 코드를 꼭 만들어 두십시오. 다운로드는 해당 라이브러리를 사용하는 것을 권장합니다.
앱 개발이 끝나셨으면 Testing Your Expansion Files로 가서 테스트 해보세요!
Rules and Limitations
- 다음 것들을 주의하세요
1. expansion file은 2gb를 넘을 수 없습니다.
2. 유저가 expansion file을 다운로드 하기 위해서는, 해당 어플리케이션을 google play에서 다운로드 받은 상태여야 합니다. 만을 다른 방법으로 다운로드 받았다면, google play에서는 url을 제공해주지 않습니다.
3. 앱에서 다운로드를 실행할때, 얻는 url을 임시로 생성되는 것이며, application의 다운로드가 다 완료되면 해당 url은 사라집니다.
4. 만일 새로운 apk를 올리거나, 여러개의 apk를 올린다면, 이전에 올린 expansion file을 선택할 수 있습니다. expansion file 이름은 바뀌지 않고, 원래 apk와 같이 올라갔더너 버젼으로 매치 됩니다.
5. 만을 여러개의 apk를 올리고 expansion file도 기기에 맞게 존재한다면, 각각의 기기를 위한 apk를 올려서 유일한 versionCode를 얻어야되고, 각가그이 apk에 filter를 설정해줘야 됩니다.
6. expansion file만 바꾸는 것으로 당신의 어플리케이션이 업데이트 된 버젼이라고 알릴 수는 없습니다. 어플리케이션의 버젼을 올리기 위해서는 apk를 변경해야 합니다.
7. obb 폴더 안에는 아무것도 저장하지 마십시오. 다른 저장할 파일들이 존재한다면 getExternalFilesDir()을 이용하여 저장하세요.
8. .obb파일의 이름을 바꾸거나 지우지 마십시오.(업데이트를 제외한). 이는 google play에서 지속적으로 expansion file을 다운로드 하게 만드는 현상을 만듭니다.
9. expansion file을 수동으로 업데이트를 해준다면, 이전 expansion file또한 수동으로 지워준 상태여야 합니다.
Downloading the Expansion Files
- 대부분의 경우에는 google play에서 expansion file을 받아줍니다. 그러나 가끔 받지 못하는 경우에는 직접 다운로드를 받아야 합니다. 이럴때는 Google Play's Application Licensing service에서 제공되는 url을 통해서 받습니다.
다운로드를 받기 위해서는 다음과 같은 절차를 거칩니다.
1. 어플리케이션이 실행되면 shared storage location(Android/obb/<package-name>/ )에 expansion file이 존재하는지 검색합니다.
2. 있다면 어플리케이션이 실행되고 없다면 다음 과정을 거칩니다.
3. Google Play's Application Licensing service 에 요청을하여 expansion file의 이름, 사이즈, url을 가져옵니다.
4. 얻어온 url을 사용하여 expansion file을 다운로드 합니다.
만일 여러분의 어플리케이션이 무료버전이라면 아마 Applciation Licensing service를 사용하지 않았을 것입니다. 이 서비스는 유저가 올바르게 구매했다는 것을 확신하기 위한 정책(?) 입니다. 따라서 만일 여러분의 어플리케이션이 무료라고 하더라도, expansion file을 이용하기 위해서는 License Verification Library(LVL)을 포함시켜야 합니다. 라이선스 인증을 위해서가 아니라, google play에 url을 얻기위해 포함시켜야 되는 것입니다.
다운로드를 시작하기 이전에 다음과 같은 사항들을 체크해 주십시오.
1. 기기에 충분한 공간이 있는지 확인해 주세요.
2. 파일 다운로드를 background service에 등록시켜야 합니다.
3. 다양한 에러가 발생할 수 있으니 주의해 주십시오(..... ㅡ.ㅡ;;)
4. 네트워크 연결 문제에 의한 다운로드 중지도 고려해야 합니다. (다시 다운로드나, resume과 같은것들
위의 문제는 저희가 제공하는 Library를 사용하면 해결 가능합니다. 그렇지 않고 직접 만드시겠다면...... Application Licensing을 참고하시고, APKExpansionPolicy class를 사용하셔야 합니다.
About the Downloader Library
-
'개발 > 안드로이드' 카테고리의 다른 글
[Android] Notifications(알림) (0) | 2013.11.13 |
---|---|
안드로이드 Notification (안드로이드 알림) (0) | 2013.11.13 |
[Android]Shape 요소 (0) | 2013.11.05 |
TextWatcher 설명 (0) | 2013.10.09 |
하나의 TextView에서 여러가지 글자색과 스타일 사용하기 (0) | 2013.07.24 |
댓글