출처 : http://blog.naver.com/itstaredu?Redirect=Log&logNo=150092425473
시스템이 개발자의 어플리케이션을 외장 메모리에 설치 할 수 있도록 허용하기 위해서는 메니페스트 파일의 [manifest] 엘레먼트에 'preferExternal' 또는 'auto' 값을 갖는 android:installLocation속성 값을 추가해야 한다.
어플리케이션을 외장 메모리에 설치하는 기능은 오직 안드로이드 2.2이상의 기기에서만 작동이 가능하다.
API Level 8 이전의 버전으로 작성된 어플리케이션은 항상 메모리에 저장되고 외장 메모리에 옮길 수 없다. (사용자가 2.2이상의 디바이스를 사용하더라도 불가능!!) 그렇지만 반대로 개발자가 API Level 8 이상의 버전으로 어플리케이션을 작성하여 해당기능을 사용하면서 동시에 이전 버젼을 디바이스와의 호환성을 유지하는 것이 가능하다.
[sourcecode language="xml"]
android:installLocation="preferExternal"
...>
[/sourcecode]
어플리케이션이 외장 메모리에 설치된다면 다음과 같은 특성을 띄게 됩니다.
- 외장 메모리가 마운트 되어 있는 한 어플리케이션 성능 상에 어떠한 차이도 없다.
- 어플리케이션 .apk파일은 외장메모리에 저장되나 모든 private한 사용자 데이터 베이스, 퇴적화된 .dek파일과 native코드들은 모두 내장 메모리에 저장된다.
- 개발자의 어플리케이션이 저장된 유니크한 컨테이너는 랜덤하게 생성된 키를 이용하여 암호화되고 해당 어플리케이션을 설치한 디바이스만이 암호를 풀 수 가 있다. 그렇기 때문에 SD카드에 설치된 어플리케이션은 오직 하나의 디바이스에서만 작동하게 된다.
- 사용자는 시스템 설정을 통해 외장 메모리에 설치된 어플리케이션을 내장 메모리로 옮길 수 있다.
이를 위해서 다음과 같은 작업이 필요함.
- [manifest] 엘리먼트에 android:installLocation 속성 추가.
- android:minSdkVersion 속상 값을 8이 아닌 그 보다 작은 값으로 설정함. 어플리케이션 코드는 설덩된 버젼이 호환가능한 API만을 사용하여야만 한다.
- 어플리케이션을 컴파일 하기 위해서는 어플리케이션 빌드 타겟을 API Level 8로 변경한다. 그 이유는 이전 버전의 안드로이드 라이브러리 해상 속성 값에 관해 알지 못하고, 그러기에 컴파일 오류가 발생되기 때문이다.
- 여러분의 어플리케이션이 2.2 이전 버젼에 설치될 때 메니페스트의 android:installLocation 속성 값은 무시되면서 내장 메모리에 설치 될것이다.
외장 메모리에 설치하면 안되는 어플리케이션
링크 참조