라벨이 [Mobile]인 게시물 표시

android Multidex 적용

테스트 프로그램을 만들거나 프로젝트 초기에는 별문제 없지만 개발하는 소스와 라이브러리가 많아지면서 꼭 발생하는 오류가 있습니다. LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in 바로 Dex 오류 입니다. 1. 오류 발생 원인  android apk에는 Dalvik Executable이라는 Dex 파일 존재합니다. 1개의 Dex파일 안에는 참조 될수 있는 함수의 개수는 65,536개 라고 합니다. 위의 에러는 함수가 총 65,536개 이상이 되었을때 발생하는 오류 입니다. 난 저렇게 많이 안썼는데 생각 하실수도 있지만 개발에 필요한 라이브러리 파일들의 함수들 까지 생각한다면 저 숫자는 어느정도 납득할수 있을 것입니다. 그래서 문제의 해결방법으로 Multidex를 적용하는 방법을 알아보도록 하겠습니다. 2. gradle 설정 android { defaultConfig { multiDexEnabled true } } dependencies { compile 'com.android.support:multidex:1.0.1' } Multidex를 사용하기위해서 defaultConfig 쪽에 사용하도록 설정 하고 dependecies 를 추가 합니다. 3. 소스 추가(Application이 있는 프로젝트) @Override protected void attachBaseContext(Context base) { super . attachBaseContext ( base ) ; MultiDex . install ( this ) ; } Application을 만들어서 작업하는 경우 Application 클래스안에서 MultiDex.install 함수를 추가 합니다. 3. 소스 추가(Application이 없는 프로젝트) < application android : name...

android의 SharedPreferences알아보기

android에서 최초실행 여부, 간단한 설정한 값등을 어디에 저장 하면 좋을까요? 로컬DB에 쓰기, 파일에 쓰기, SharedPreferences 사용하기등 다양한 방법이 존재합니다. 그중에 이러한 작업들은 android에서 기본적으로 제공하는 SharedPreferences를 활용하면 쉽게 쓰고 읽을수 있습니다. 1. SharedPreferences란?  - 간단하게 말해 xml파일에 필요한 데이터를 저장하여 쉽게 읽고 쓰게 하는 것 입니다.  - 경로 : data/data/패키지명/shared_prefs/SharedPreference 에 파일이 저장 2. 객체얻어오기  - getSharedPreferences(String name, int mode)   -> 위 함수를 통하여 SharedPrefrences 객체를 받아 올수 있습니다.   -> 첫번째 인자  name은 해당 SharedPreferences의 이름입니다. 특정 이름으로 생성할수 있고 해당 이름으로 xml 파일이 생성된다고 생각하시면 됩니다.   -> 두번째 인자 mode는 읽고 쓰기 권한 관련된 Mode라고 생각하시면 됩니다. 일단 MODE_PRIVATE만 생각하세요. 3. 저장하기 SharedPreferences pref = getSharedPreferences ( " pref " , MODE_PRIVATE ) ; SharedPreferences . Editor editor = pref . edit ( ) ; editor . putString ( " key1 " , " value " ) ; editor . putInt ( " key2 " , 10 ) ; editor . commit ( ) ; 저장 하는 소스입니다. SharedPreferences 객체를 생성하고 데이터를 저장하기 위해서 Editor 객체를 받아 옵니다. Editor 객체를 ...

android Realm 데이터베이스 연동 하기(2) - 활용

지난 시간에 이어서 Realm DB에 대해 알아볼까 합니다. 오늘은 android에서 간단한 활용법을 알아보겠습니다. 모델클래스를 만들어 보도록 하겠습니다. public class User extends RealmObject { private String name ; private int age ; public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } public int getAge ( ) { return age ; } public void setAge ( int age ) { this . age = age ; } } 모델클래스의 형태는 기존의 모델들과 크게 다르지는 않고  RealmObject를 상속 받았는 것이 특징 입니다. 모델클래스로 객체를 생성해서 저장하면 되기때문에 모델클래스 하나가 테이블 하나라고 생각하면 이해하기 쉬울 것입니다. Realm realm = Realm . getDefaultInstance ( ) ; realm . beginTransaction ( ) ; User user = realm . createObject ( User . class ) ; user . setName ( " John " ) ; user . setAge ( " 30 " ) ; realm . commitTransaction ( ) ; Insert 하는 부분입니다. createObject 함수를 통해 Realm 모델 객체를 생성 하고 DB에 저장 됩니다. Realm realm = Realm . getDefaultInstance ( ) ; User user = new User ( ) ...

android Realm 데이터베이스 연동 하기(1) - 설정

android에서 로컬에 데이터를 저장한다면 어떤 방법을 사용 하시나요? 이 물음에 답을 생각하면 제일 처음 고민 하는 것은 첫번째로 DB를 사용 할까 SharedPreferences를 사용할까를 생각 하게 되는 것 같습니다. SharedPreferences경우에는 간단하게 데이터를 저장하고 불러오기 편하여 많이 사용하지만 구현해야할 사항에 따라 DB를 생각해야 하는 경우가 생깁니다. 기본적으로는 android에서는 SQLite를 제공하여 구현할수 있지만 SQL에 대한 개념이 있다면  쉬울수 있고 모르면 어려울수도 있는 부분들이 생기기 때문에 보다 쉽게 구현할수 있는 방법은 없을까 생각하면서 찾는다면 Realm이란 모바일DB가 쉽게 검색 될 것입니다. 1. Realm 이란?  오픈소스로 모바일에 최적화된 데이터베이스 라이브러리 입니다.   ORM이 아닌 데이터컨테이너 모델을 사용하고 데이터객체는 Realm에 객체로 저장됩니다.  <특징>   - 네이티브 객체 저장   - zero-copy : 데이터베이스 안팎으로 복사없이 그대로 직접 작업 가능   - 라이브 오브젝트 패턴 : Reaml에 저장된 객체의 인스턴스가 있고 다른곳에서 해당 인스턴스 업데이트시 기존 인스턴스도 업데이트   - 크로스 플랫폼   - 오프라인-우선   - ACID 준수  <성능>   2. android에서 Realm 연동  1) gradle 설정 buildscript { repositories { jcenter ( ) } dependencies { classpath " io.realm:realm-gradle-plugin:3.5.0 " } } 프로젝트 수준의 build.gradle 파일에 위와 같이 추가합니다. a...