Error generating final archive: Debug certificate expired on  [날짜]


증상 : 이클립스의 Problems에 위와 같은 에러 메시지가 뜨고 프로젝트가 빌드 또는 실행이 되지 않는 경우가 생길때 

원인:  Debug Certificate 가 만료(Certificate 는 만들어진 후 1년이 지나면 Expire 됨)

해결 방법 : 만료된 debug.keystore 파일을 삭제

                파일 위치는 메뉴의 Window > Preferences > Android > Build 내 "Default debug keystore"

                삭제 후 프로젝트 clean



Posted by finewoo
,

[Android] Intent

Android 2010. 3. 25. 20:39
Activating components: intents

Content providers are activated when they're targeted by a request from a ContentResolver. The other three components activities, services, and broadcast receivers are activated by asynchronous messages called intents. An intent is an Intent object that holds the content of the message. For activities and services, it names the action being requested and specifies the URI of the data to act on, among other things. For example, it might convey a request for an activity to present an image to the user or let the user edit some text. For broadcast receivers, the Intent object names the action being announced. For example, it might announce to interested parties that the camera button has been pressed. 




컨텐트 프로바이더content provider는 컨텐트 리졸버content resolver 요청의 대상target이 될 때 활성화된다. 하지만 다른 세 가지 컴포넌트, 즉 액티비티, 서비스, 그리고 브로드캐스트 리시버는 인텐트intent라 불리는 비동기적인 메시지에 의해 활성화된다. 인텐트는 컨텐트 메시지를 보유하고 있는 인텐트Intent 오브젝트다. 인텐트는 액티비티와 서비스에 대해서, 그것에게 요청되는requested 액션을 가리키고 그 액션이 처리해야 하는 데이터의 URI를 나머지 다른 것들과 함께 명시한다. 예를 들어 인텐트는 어떤 액티비티가 사용자에게 이미지를 보여주도록 하거나, 또는 사용자가 어떤 텍스트를 편집할 수 있도록 하는 요청을 전달할 수 있다. 인텐트 오브젝트는 브로드캐스트 리시버에 대해서는, 공지되는announced 액션을 가리킨다. 예를 들어 그것은 카메라 버튼이 눌려졌다는 사실에 관심을 갖는 관계자party에게 공지될 수 있다.


[출처] 안드로이드 개발자 가이드



애플리캐이션은 하나 이상의 액티비티로 이루어질 수 있다. 실제로 여러개의 액티비티, 서비스가 서로 연결되어 하나의 애플리캐이션을 구성하는 경우가 대부분일 것이다.

안드로이드에서는 인텐트 객체를 이용하여 다른 컴포넌트를 호출할 수 있다. 즉 인텐트는 어떤 행위를 뜻하는 의미로 해석될 수도 있다. 인텐트 객체는 안드로이드 어플리케이션 내의 컴포넌트를 호출하기 위한 여러 정보들을 담고 있으며, 이 정보들에는 호출 대상 컴포넌트의 이름이 명시되어 있을 수도 있고, 혹은 호출 대상 컴포넌트의 특성만 나열되어 있을 수도 있다. 또한, 어플리케이션 호출 외에도 호출된 액티비티가 자신을 호출한 액티비티에게 결과값 등을 전달할 때에도 인텐트 객체에 데이터를 담아 전달한다. 이런 경우는 인텐트 객체가 마치 물건을 전달해주는 역할을 하기도 한다.



1. 명시적 인텐트 (Explicit Intent)

API
public Intent (Context packageContext, Class<?> cls)

packageContext : 현재 컴포넌트를 포함하는 컨텍스트 객체
cls : 호출할 컴포넌트의 클래스



 

Intent intent = new Intent(this, TargetActivity.class);


인텐트 객체 생성자의 첫번째 인자는 호출하는 컴포넌트의 컨텍스트 객체를 의미하며, getApplicationContext() 메소드를 통해 어플리케이션의 컨텍스트를 넘겨주는 것도 가능하다. 이렇게 인텐트를 생성한 후, startActivity() 혹은 startService() 등의 메소드를 호출하여 호출하려는 컴포넌트의 유형에 맞게끔 인텐트를 넘겨주면 해당 컴포넌트를 호출할 수 있다.


// 인텐트 객체 생성
Intent intent = new Intent(this, SubActivity.class);

// 액티비티 실행
startActivity(intent);

//결과값을 받기 위한 액티비티 실행
int REQUEST_CODE = 1; // 결과값을 요구하는 여러 상황을 호출 대상 액티비티에서 알게끔 합니다.

startActivityForResult(intent, REQUEST_CODE); // 액티비티 호출


 


2. 암시적 인텐트 (Implicit Intent)


암시적 인텐트는 호출할 컴포넌트를 정확히 아는 것이 아니라 인텐트 객체 내에 호출 대상 컴포넌트를 찾을 수 있는
정보들만 들어있다. 인텐트 객체 내의 이러한 정보들은 호출 대상 컴포넌트가 action, category(어떤 작업을처리할
수 있는지),  data(어떤 유형의 데이터를 처리할 수 있는지) 그리고 type[mimeType](처리할 데이터가 있는 주소)를
주로 담고 있다.
애플리케이션이 구동될 때 처음으로 실행되는 액티비티는 메니페스트 파일의 인텐트 필터에 아래와 같이 정의되어 있다.


<activity android:name=".LifeCycleTester" android:label="@string/app_name">
 <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <catgory android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
</activity>


인텐트 필터는 자신이 원하는 인텐트를 골라낼 때 필요한 정보들을 정의해놓은 것으로,암시적 인텐트의 인텐트 해석(Intent Resolving) 과정에 꼭 필요한 요소이다.

사용예)

//인텐트 객체에 type 속성(전화번호부 데이터를 받기 위한)을 추가
Intent intent = new Intent();
intent.setType("vnd.android.cursor.item/phone");

Intent i = new Intent();
i.putExtra("HELLO", "Hello Android");

// 인텐트를 받은 다른 컴포넌트가 Extras 데이터를 받아온다.
String str = getIntent().getExtras().getString("HELLO");


Posted by finewoo
,

[Android] Data Storage

Android 2010. 2. 25. 01:08

애플리케이션에서 데이터를 저장, 가공, 표현하기 위해서 데이터 저장 메커니즘이 있다.
안드로이드 애플리케니션 또한 마찬가지로 Data Storage 메커니즘을 제공한다.

기본적으로 안드로이드 상에서, 모든 애플리케이션의 데이터는 그 애플리케이션에게 private하다.
그래서, Content Provider를 통해서 private한 데이터를 다른 애플리케이션에게 보여준다.
Content Provider는 애플리케이션 데이터에 읽기/쓰기 접근을 제공하는 컴포넌트이다. 
읽기/쓰기 접근은 그 Content Provider가 부과할 수도 있는 제약의 조건에 따른다. 그 Content Provider는 데이터를 요청하고 수정하는 것에 대한 표준 문법과, 그리고 리턴된 데이터를 읽는 것에 대한 표준 메커니즘을 구현한다. 

안드로이드는 데이터를 저장하고 가져오기 위해 다음의 네 가지 메커니즘을 제공한다.

1. Preferences
2. 파일(Local File)
3. 데이터베이스(SQLite)
4. 네트워크


Preferences 

Preference는 기본적인 데이터 타입에 대한 키와 값의 조합으로 데이터를 가져오는 가벼운 메커니즘이다. 
이는 애플리케이션이 시작될때 로드되어야 하는 기본적인 환경설정 사항들에 대한 정의로 자료형으로는 Boolean, float, int, long, String이 있다. 
이곳에 값을 읽고 쓰기 위해서는 Context.getSharedPreferences()를 호출한다. 만약 같은 애플리케이션 내의 다른 컴포넌트들에게 이것을 공유하고자 한다면, 프레퍼런스 집합에 이름을 할당하면 된다. 또한 호출하는 Activity의 private 영역에 그것을 유지하기 위해서는, 이름없이 Activity.getPreferences()를 사용한다. Content Provider를 사용하는 것에 의하지 않고서는 Preference를 공유할 수 없다.

    @Override
    protected void onCreate(Bundle state){         
       super.onCreate(state);
    
    . . .
    
       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean silent = settings.getBoolean("silentMode", false);
       setSilent(silent);
    }


Files

Mobile Device 상에 또는 분리될 수 있는 저장 매체 상에 직접적으로 파일들을 저장할 수 있다. 
기본적으로 다른 애플리케이션들은 이러한 파일들에 접근할 수 없다.
만약 컴파일 시점에 애플리케이션과 함께 패키지할 정적(static) 파일을 가지고 있다면, 프로젝트의 res/raw/myDataFile로 
그 파일을 저장할 수 있으며, 그리고 나서 Resources.openRawResource(R.raw.myDataFile)를 사용해서 그것을 열수 있다. 그것은 파일로로부터 읽기 위해 사용할 수 있는 InputStream 오브젝트를 리턴한다.


Databases

안드로이드 API는 SQLite 데이터베이스를 지원한다. 각각의 데이터베이스는 그것을 생성한 애플리케이션에게 private하다.
SQLiteDatabase 오브젝트는 데이터베이스를 나타내고, 그것과 상호작용하는 메소드들을 가지고 있다. 데이터베이스를 생성하기 위해서는 SQLiteDatabase.create()를 호출하고, 또한 서브클래스 SQLiteOpenHelper를 호출한다.
SQLite 데이터베이스 시스템을 위한 지원의 일부로써, 안드로이드는 데이터베이스 관리 기능을 제공한다. 그것은 유용한 오브젝트들로 감싸진 복잡한 데이터 집합들을 저장하게 한다. 예를 들어 안드로이드는 contact 정보에 대한 데이터 타입을 정의한다. 그것은 성과 이름(문자열), 주소와 전화번호(또한 문자열), 사진(비트맵 이미지), 그리고 사람을 설명하는 다른 많은 정보를 포함하는 많은 필드들로 구성되어 있다.
안드로이드는 테이블 컨텐츠를 브라우즈하고, SQL 명령어를 실행하고, 그리고 SQL 데이터베이스의 다른 유용한 기능을 수행하는 것을 가능하게 하는 sqlite3 데이터베이스 도구를 함께 배포하고 있다.
모든 데이터베이스(SQLite와 그 밖의 것들)는 디바이스 상의 /data/data/package_name/databases 안에 저장된다.
그리고, 레코드에 대한 고유한 ID로 사용될 수 있는 자동증가 키값 필드(autoincrement value key field)를 포함할 것을 권장한다. 이것은 정적(private) 데이터를 위해서는 요구되지 않지만, 만약 컨텐트 프로바이더를 구현한다면, 그러한 고유한 ID 필드를 포함해야 한다. 


Network 

데이터를 저장하고 가져오기 위해 네트워크를 사용할 수 있다. 
네트워크 오퍼레이션을 하기 위해서는, 다음의 패키지에 있는 클래스를 사용한다.

java.net.*
android.net.*



Posted by finewoo
,

"안드로이드 개발자 가이드 한글누리집" 사이트가 최근 베타 오픈하였다.

Kandroid가 공개한 안드로이드 개발자 가이드 한글누리집은 대부분 원문과 함께 한글번역이 되어있다.

http://www.kandroid.org/board/kandroid_dev.php








'Android' 카테고리의 다른 글

[Android] Intent  (0) 2010.03.25
[Android] Data Storage  (0) 2010.02.25
[Android] 안드로이드 설치 및 개발 환경설정  (0) 2010.02.05
[Android] 안드로이드란?  (1) 2010.02.02
[Android] 안드로이드 개발 관련 링크  (1) 2010.02.01
Posted by finewoo
,

1. JDK 설치
http://java.sun.com/javase/downloads/widget/jdk6.jsp
Java SE Development Kit (JDK) 6 를 다운 받아 설치한다.


2. 이클립스 설치

http://www.eclipse.org/downloads/
Eclipse 3.5 (Galileo)
Eclipse IDE for Java Developers 버전 다운로드 후 설치할 디렉토리에 압축을 푼다.
안드로이드에서 WST를 사용하는데 기본으로 WST가 포함되어 있다.
JEE 개발용은 안드로이드 개발에 굳이 사용할 필요는 없다.


3. 이클립스 플러그인(ADT) 인스톨

Eclipse 3.5 (Galileo) 기준
  1. Help/Install New Software
  2. Available Software
  3. Add : https://dl-ssl.google.com/android/eclipse/
  4. Developer Tools 아래 Android Development Tools와 Android Editors가 체크되어있는지 확인
   (https가 안될경우 http로 연결해본다.)


4. 안드로이드 SDK 설치
http://developer.android.com/sdk/index.html(SDK 다운로드)
http://developer.android.com/sdk/installing.html(설치 방법 안내)
현재 최신 릴리즈 버전은 Android 2.1 Platform 이며 다운받아 특정 디렉토리에 압축을 풀고
'SDK Setup.exe'
를 실행한다.
Available Packages 메뉴에서 설치하고자 하는 버전의 패키지 항목들을 설치한다.

- Documentation for Android SDK, API 7, revision 1
- SDK Platform Android 2.1, API 7, revision 1
- Google APIs by Google Inc., Android API 7 revision 1
- Usb Driver package, revision 3

안드로이드 2.0 SDK 부터 새로 생긴 방식으로  각 버전별 에뮬레이터 및 SDK를 별도로 다운로드 받아 사용할 수 있다.
1. Window / Android SDK and AVD Manager 실행
2. Available 패키지에서 설치를 원하는 API 버전 선택 

  (만약 자동 연결, 설치에 실패하는 경우 Settings 메뉴의 Force https://... 체크한 후 다시 설치한다.)

3. Install Selected

도스창 명령행의 사용을 위해 시스템 Path 'C:\Java\android-sdk-windows\tools\' 추가한다.


5. 안드로이드 SDK 이클립스  설정
  1. Eclipse의 메뉴 Windows/Preference 실행
  2. 왼쪽 탭에서 Android 선택
  3. Browse를 한후 SDK를 설치한 디렉토리 선택




'Android' 카테고리의 다른 글

[Android] Intent  (0) 2010.03.25
[Android] Data Storage  (0) 2010.02.25
[Android] 안드로이드 개발자 가이드 한글누리집  (1) 2010.02.22
[Android] 안드로이드란?  (1) 2010.02.02
[Android] 안드로이드 개발 관련 링크  (1) 2010.02.01
Posted by finewoo
,


What is Android?

Android is a software stack for mobile devices that includes an operating system, middleware and key applications. The Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
[출처]http://developer.android.com/guide/basics/what-is-android.html


안드로이드는 오퍼레이팅 시스템, 미들웨어와 키 애플리케이션을 포함한 모바일 장치를 위한 소프트웨어 스택이다.
안드로이드 SDK는 자바 프로그래밍 언어를 사용하는 안드로이드 플랫폼에서 애플리케이션 개발을 시작하기 위한 필요한 도구와 API들을 제공한다.

단순하게 본다면 PC에서의 리눅스나 윈도우와 같은 운영체제라고 생각해도 된다.
즉, 안드로이드 플랫폼은 운영체제, 미들웨어, 키(Key)애플리케이션들을 포함한 모바일 디바이스를 위한 소프트웨어 집합이다.

안드로이드를 개발의 입장에서 본다면 애플리케이션 개발과 플랫폼 개발로 나눌 수 있다.
애플리케이션 개발에 있어서 안드로이드는 JAVA를 기반으로 한 소프트웨어 프레임워크이며 플랫폼 개발에서는 휴대폰의 새로운 서비스, 기능을 창출해 내는 OPEN SOURCE 프로젝트라고 할 수 있다.
안드로이드는 Linux를 OS로 채택하고 있으며 Google사가 중심으로 수많은 단체로 결성된 OHA(Open Handset Alliance)에 의해 개발되고 있다.

여담으로  '안드로이드'의 희랍 어원적인 의미는 '인간을 닮은 것'이라는 뜻인데,19세기의 작가 빌리에드릴라당이 처음으로 과학소설에 사용했다. <미래의 이브> 이곳에서 등장하는 여성 로봇의 이름이 '안드로이드'이다.
그래서 구글의 안드로이드 로고에도 이 로봇 형상이 들어가게 된다.



Posted by finewoo
,

Android.com
http://www.android.com/
안드로이드 공식 웹사이트.
개발자 웹사이트 및 안드로이드 마켓 링크

Android Developers
http://developer.android.com/index.html
안드로이드 개발자 웹사이트
SDK 다운로드, 리소스, 리퍼런스, 가이드등 제공

Android Market
http://www.android.com/market/
안드로이드 마켓. 무료 및 유료 안드로이드 애플리케이션 장터.

구글 안드로이드
http://code.google.com/android/
구글의 안드로이드 코드사이트

안드로이드펍 커뮤니티
http://www.androidpub.com/
안드로이드관련 사용자 및 개발자등 커뮤니티 사이트
개발과 관련하여 비교적 많은 자료가 등록.

안드로이드 클럽
http://www.androidclub.co.kr/

안드로이드 사이드
http://www.androidside.com/

코리아 안드로이드
http://www.kandroid.org/
Posted by finewoo
,