이번에 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 파일을 폰에 올려봐야 된다.
※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 방식)로 되어있는지 확인 해볼것.
'Information' 카테고리의 다른 글
MS의 시카고 데이터센터 (출저 - http://truefeel.tistory.com/169?_top_tistory=new_image ) (0) | 2009.10.07 |
---|