2015년 1월 5일 월요일

android - widget 호환처리

Widget 호환처리

1. Android 버전별 위젯 기능 지원 사항

- 스크롤 지원 : 3.0이상 (SDK_INT 11)
- 위젯 크기 조정 지원 : 3.1이상 (SDK_INT 12)
- 락스크린 위젯 4.2이상 (SDK_INT 17)


2. Android 버전별 위젯 활성/비활성 하기

 - 리스트 뷰를 사용한 위젯 : 진저브래드 이하에서는 해당 위젯 사용이 불가능하다.

 1) values 폴더의 strings.xml에 해당 위젯 사용에 대한 true/false 값 정의
  예) 기본값은 false로 세팅
   <string name="use_list_widget">false</string>

 2) values-v11 폴더의 strings.xml에 위의 값 정의
  예) 허니콤 이상에서 리스트 뷰 사용이 가능하므로 true 세팅
  <string name="use_list_widget">true</string>

 3) AndroidManifest.xml 에 위젯 프로바이더 정의
  예) 위젯 프로바이더 태그에 enabled 속성을 위에서 정의한 값으로 사용
<receiver
        android:enabled="@string/use_list_widget"
android:name=".Widget.WidgetProviderForListWidget"
android:label="위젯 이름" >
...
</receiver>

 - android:enabled 값이 true/false 문자열 값으로 처리가 가능하다.
 - 위젯 사이즈 재조정이나 락스크린용 위젯에 대해서도 위와 같은 방법으로 사용이 가능하다.




android - INSTALL_FAILED_DEXOPT

INSTALL_FAILED_DEXOPT

Android 2.3 (진저브레드) 이하 버전에서 발생 할 수 있는 설치관련 에러


에러 원인

1. perm mem(불 확실함)이 5Mbytes로 제한되어 이를 초과한 경우
 - class, interface 등 실행에 필요한 사전 정보의 용량이 5Mbytes를 초과할 경우 발생
 - apk의 사이즈가 아님

2. method, field가 65536개를 초과한 경우


해결 방법

1. 코드 최적화 툴 사용(proguard, dexguard 등)

2. 불필요한 코드나 라이브러리를 제거

3. dex 분리

4. apk 분리


참고

사용한 라이브러리중 클래스 파일이 많으나 실제 사용하는 클래스가 적은 경우 해당 라이브러리를 다이어트 시켜 사용할 수 도 있다.
Google Play Service 라이브러리의 경우 서비스에 따라 패키지가 분리되어 있어 특정 패키지를 제거할 수 있다.