2011. 6. 28. 19:58
※출처 : http://appleandroidjunhulove.tistory.com


이번에 GPS Alarm 을 업로드 하면서 업로드 전 과정을 간단하게 정리해보았다.

나도 추후에 다시 한번 참고해도 되겠고, 혹시 이 글을 보시는 분도 필요해서 이 글을 볼 것이라 생각한다.

1. 업로드 하기 전에 해당 폴더를 만들기

- Keytools /Keytools/keys  2개의 폴더를 만들어준다.

- 솔직히 /Keytools 폴더 하나로 해도 큰 지장은 없다.

 

2. Dos 모드로 들어가서 경로를 /Keytools 폴더로 이동한다.

프롬프트에 아래의 형식으로 keystore 파일을 제작하자.

 

keytool –genkey –alias {이름}.keystore –keyalg RSA –validity {20000} –keystore {해당파일이 들어갈 경로와 파일 이름}

 

Ex/ keytool –genkey –alias alarm.keytore –keyalg RSA –validity 20000 –keystore keys/alarm.keystore

 

 

3.     다음은 암호를 입력하라는 메시지와 암호를 입력하고, 이름, , 조직단위 등의 정보를 입력해준다.

입력한 내용이 맞는지 물어보면 y 라고 입력하고 엔터를 눌러준다.

 

마지막에 한번 더 암호를 물어보게 되는데, 그냥 엔터를 누르게 되면, 방금 전에 입력한 keystore 암호와 동일하게 생성된다.

 

4.     위의 과정에서 keystore 파일이 /keytools/keys 폴더안에 생성되었다.

 

5.     다음은 맵 키를 가져오도록 한다.

     다만 이 과정은 구글맵에 포함된 어플리케이션에서 만 해당되는 과정이다.

     만약 어플리케이션에 구글맵이 포함되어 있지 않다면, 바로 7번 과정으로 넘어가도록 하자.

    

안드로이드에서 실제 배포할 어플리케이션에 구글맵이 포함될 경우는 기존 debug.keystore 로 배포받은 Mapkey 말고 위에서 배포용으로 제작한 keystore 로 다시 받아야 한다.

 

해당 keystore 파일이 있는 폴더 경로로 이동을 해서,

다음과 같은 형식으로 입력하자

 

keytool –list –alias {위에서 만든 keystore 이름} –keystore {위에서 만든 keystore 이름}

 

Ex/ keytool –list –alias alarm.keystore –keystore alarm.keystore

 

6.     암호를 입력하라고 하는 물음이 등장하는데 위에서 만든 keystore의 암호를 입력한다

그러면 인증서 지문이 등장하는데

이 인증서 지문을

http://code.google.com/intl/ko/android/maps-api-signup.html

 

사이트에서 입력하자 ..

 

그러면 사용자 키를 얻어 올 수 있고, 그것을 구글 맵을 사용하는 layout xml 문 안에 넣어주자

 

7.     다음은 Unsign 된 어플리케이션 패키지를 만들자

아래의 스크린샷으로 이동하자.

 

 

그러면 파일을 저장하는 창이 뜨는데 keystore 가 저장된 폴더와 동일하게 하는 편이 작업을 하는대 편하다.

 

8.     파일을 저장했다면, jarsigner.exe 를 사용해서 sign apk 파일을 만들어보자

Apk keystore 가 저장된 폴더로 이동을 해서,

아래와 같은 형식으로 입력을 하자

 

Jarsigner –verbose –keystore {만들어놓은 keystore파일 이름} –signedjar {Signed Apk 파일 이름.apk} {Unsigned Apk 파일이름.apk} {만들어놓은 keystore파일 이름}

 

Ex/ jarsigner –verbose –keystore alarm.keystore –signedjar Alarm_signed.apk alarm.apk alarm.keystore

 

그리고 마지막을 암호를 다시 한번 물어보게 되는데, keystore 파일을 만들 때 입력했던 암호를 입력한다.

 

 

9.     만들었다면 실제로 폰에 해당 파일을 올려보고 잘 되는지 확인을 하자..

 

안드로이드 SDK 폴더의 tools 폴더로 이동을 해서

 

Adb install {최종완성한 apk 파일이름.apk}

 

로 실제로 apk 파일을 폰에 올려봐야 된다.


 
Posted by TIMEC
2011. 5. 26. 00:50

※Restful 서버는 JAX-RS 구현체 사용.

■ 클라이언트에서 서버의 레스트풀 URL로 POST형태로 호출할 경우 예제 소스.

      HttpClient client = new DefaultHttpClient();
      HttpPost request = new HttpPost("레스트풀 URL");
         
      List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
      postParameters.add(new BasicNameValuePair("userid", userid));
        
      UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
      formEntity.setContentType("application/json");
      formEntity.setContentEncoding("UTF-8");
   
      request.setEntity(formEntity);
      HttpResponse response = client.execute(request);  


위와 같이 파라메터를 클라이언트 사이드에서 바인딩 시켰을때 서버 사이드에서

값을 참조하면   "????????" 또는 "%FE%EEFE%DE" 와 같은 형태로 한글 데이터가

손상되게 될경우가 있는데 ServletFilter로 UTF-8을 설정해주고 

URLDecoder.decode("내용값", "UTF-8")로

디코딩 해주어도 변함없이 한글이 손상된 형태로 출력될수도 있다.

■ Solution

★ 클라이언트 - BasicNameValuePair 인스턴스를 생성할 때.

new BasicNameValuePair("userid", userid);

위의 소스코드를 아래와 같이 수정한다.

new BasicNameValuePair("userid", URLEncoder.encode("userid", "UTF-8"));


★ 서버 - 
클라이언트 사이드에서 전송된 정보를

URLDecoder.decode("내용 값", "UTF-8")

과 같이 처리해주면 한글 무사히(?) 출력된다.



※ UrlEncodedFormEntity의 setContentEncoding("UTF-8") 설정으로

해결되는 줄 알았지만 아무 소용이 없다는 것을 알았다.

정확하게 URLEncoder로 인코딩 URLDecoder로 디코딩을

해야 명확하게 값이 나온다.

오늘 하루는 이거 하나땜에 빠이빠이......ㅠㅠ

-----------------  2013.01.29 추가 --------------------

위의 경우 이전에 WAS의 config Encoding 설정이 UTF-8(사용할 Encoding 방식)로 되어있는지 확인 해볼것.

Posted by TIMEC
2011. 5. 24. 15:08
제 11회 2011 한국자바개발자 컨퍼런스
Posted by TIMEC