Tag Archives: 자바

[Java/Android] 안드로이드 어플 배포를 위한 키스토어(Keystore) 생성 및 릴리즈

안드로이드 어플을 마켓에 혹은 타인에게 배포하기 위해서는 자신의 키를 생성하여 개발된 어플리케이션에 사인을 하여야 합니다. 개발자 혹은 회사당 1개의 키스토어만을 가지고 있으면 됩니다. 즉 한개의 어플리케이션당 한개의 키스토어를 사용하실 필요는 없습니다.

keytool을 사용하여 키스토어 생성하기

$ keytool -genkey -alias eye -keyalg RSA -validity 10000 -keystore eye.keystore

기본적으로 위와 같은 명령을 치시면 됩니다. -alias는 키 자체의 이름을 정의하며 -keystore는 키 파일을 저장할 위치를 정의합니다. 위와 같이 입력하면 현재 디렉토리에 파일이 생성됩니다. -validity의 경우에는 이 키스토어의 유효기간을 설정하는 것인데 단위는 일입니다. 위와 같이 3650을 입력하게 되면 10년이 됩니다. 10년으로 설정하면 Google Play에 등록시에 너무 기간이 짧다고 경고가 뜨게 변경되었더군요. 충분히 큰 시간으로 설정해 줍시다.

사용자 삽입 이미지

명령을 입력하면 위와같이 자잘한 것들을 물어오게 됩니다. 대충 상황에 맞게 입력하시면 됩니다. 여기서 주의할 점은 비밀번호를 두번 물어오게 되는데요 두가지를 다르게 하시던 같게 하시던 자유입니다만 잘 기억해 두셔야 합니다. 첫번째는 키스토어의 비밀번호이고 두번째는 Eye라고 이름 정한 키의 비밀번호 입니다. 키스토어는 여러개의 키를 포함할 수 있는데 그중에 하나의 키에 대한 비밀번호를 뜻합니다.

이클립스에서 키스토어를 이용하여 배포하기

사용자 삽입 이미지
위와 같이 프로젝트에 마우스 우클릭후에 Android Tools에 들어가시면 Export Signed Application Package가 있습니다. 이것을 선택합니다.

사용자 삽입 이미지
방금전 생성한 키스토어 파일을 선택한 뒤 키스토어 비밀번호를 입력하도록 합니다.

사용자 삽입 이미지
이번엔 생성한 키의 별칭을 선택하여 해당 비밀번호를 입력합니다. 이후에 APK파일을 저장할 경로를 넣어주면 정상적으로 키가 사인된 APK 파일이 생성됩니다.

[Java/Android] Thread를 이용한 특정 작업 수행하기

안드로이드에서 비동기로 특정 작업을 처리하기 위해 간편하게 사용할 수 있는 것으로 AsyncTask가 있습니다. 하지만 그것 이전에 어디서든지 사용할 수 있는 Thread를 이용한 방법에 대해 간단히 정리해 보도록 하겠습니다.

여기서 주의할 점은 처리가 끝나는 시점에서 UI를 변경한다거나 하는 것을 핸들러를 이용하여 처리하는 부분인데요 안드로이드에서는 메인 쓰레드 이외에서 UI에 영향을 끼치는 행위를 거부하고 있습니다. 그렇기 때문에 핸들러를 이용하여 처리를 합니다.

[code]public class ThreadDownloadActivity extends Activity implements OnClickListener
{
    private ProgressDialog mPdProgress;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        // 상태 표시용 프로그래스바
        mPdProgress = new ProgressDialog(this);
        mPdProgress.setMessage(“작업을 수행중입니다.”);
        mPdProgress.setIndeterminate(true);
        mPdProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        mPdProgress.setCancelable(false);
       
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }
   
  // 이미지 다운로드 결과 표시용 핸들러
    final Handler handler = new Handler()
    {
    public void handleMessage(Message msg)
    {
    mPdProgress.dismiss();
    String message = null;
    switch(msg.what)
    {
case 0:
message = “수행 완료”;
break;

default:
message = “수행 실패”;
break;
}
   
    // 메시지 출력
    Toast.makeText(ThreadDownloadActivity.this, message, Toast.LENGTH_SHORT).show();
    }
    };

@Override
public void onClick(View v)
{
mPdProgress.show();

// 이미지 저장용 쓰레드
   Thread thread = new Thread(new Runnable()
   {
            public void run()
            {
        try
        {
        // 특정 작업을 수행
        // 원래는 이미지 다운로드를 구현해 보려 하였지만 포기;;
        Thread.sleep(2000);
        handler.sendEmptyMessage(0);
        }
        catch(Exception e)
        {
        // 작업이 실패 시
        handler.sendEmptyMessage(1);
        }
            }
        });
        thread.start();
}
}[/code]
위와 같은 코드를 수행해 보면 다음과 같이 잘 동작하는 것을 확인할 수 있습니다.
사용자 삽입 이미지1359710808.zip