저같은 경우 안드로이드 앱 개발시 JSON 데이터 처리를 위해 주로 Codehaus의 jackson json 라이브러리 (jackson-core-asl-x.x.jar, jackson-mapper-asl-x.x.jar)를 사용합니다. 

이렇게 앱에서 Jackson JSON 라이브러리를 사용하는 경우 ProGuard 설정을 어떻게 해줘야하는지 제대로 정리된 자료가 별로 없더군요.

그동안은 릴리스 빌드시에 잘못된 proguard 설정때문에 발생하는 에러나, 앱 실행시에 잘못된 소스난독화로 인한 런타임 에러를 만날때마다

임시방편으로 설정의 의미도 모른채 설정을 조금씩 고쳐가면서 소뒷걸음질하다 운좋게 에러를 해결하곤 했습니다. 에러가 없게 설정했다고 해도 왜 그런 설정이 필요한지 자세한 이유를 알지는 못했죠.

미루고 미루다 이제야 ProGuard 홈페이지 문서 Gson에서 사용하는 proguard 설정을 참고하여 아래와 같이 정리해보았습니다.

실제로 제가 개인적으로 개발중인 앱에 적용해서 빌드하고 테스트해보니 이상이 없었습니다.

# 어노테이션 보존

-keepattributes *Annotation*,EnclosingMethod


# 제너릭 타입 정보 보존

-keepattributes Signature


# Jackson이 참조하는 다른 라이브러리(joda-time 등) 없다는 경고 제거

-dontwarn org.codehaus.jackson.**


# java.lang.NoSuchFieldError: PUBLIC_ONLY 에러 제거

-keepnames class org.codehaus.jackson.** { *; }


# Jackson에 의해 JSON데이터와 매핑(바인딩)되는 모델(POJO) 클래스 보존

-keep public class my.app.model.** { *; }


# 모델 클래스외에 getter/setter 보존이 필요한 경우

#-keep public class my.app.** {

#  public void set*(***);

#  public *** get();

#}



Posted by 에코지오
,
jQuery에서 ajax() 함수의 기본 Content-Type은 "application/x-www-form-urlencoded"이므로 전송할 데이터는 query string 형식으로 작성해야 합니다. 쿼리스트링은 "key1=value&key2=value2&…"와 같은 포맷을 갖습니다.

1. form 요소 값들을 query string으로 만들기

$('#폼ID').serialize() 


2. javascript array 객체를 query string으로 만들기

jQuery.param(array객체)


만약 요청 Content-Type을 "application/json" 으로 변경한 경우에는 쿼리스트링이 아니라 json 형식의 스트링으로 데이터를 전송해야 합니다.
form엘리먼트 값들을 json 객체로 만들어주는 방법은 다음 사이트에 다양한 방법이 나와있습니다.


실제 ajax() 함수에서는 json 객체를 스트링 타입으로 바꿔서 대입합니다.
 

JSON.stringify(json객체)


그러나 쿼리스트링 형식이 가능한 상황에서 굳이 json 형식으로 데이터를 보내는 것은 별로 권장하지 않는 듯합니다.
Posted by 에코지오
,