2013-06-01 5 views
0

내 안드로이드 프로젝트 코드를 당황하게하기 위해 노력하고있어 함께 ProGuard에서 모든 제 3 자 라이브러리를 제외, 나는 ProGuard에서이 내 proguard.cfg에 다음과 같은 경우 작업을 진행하게 관리했습니다 이들은 내 프로젝트 (봄 안드로이드, 구글 광고 등)와 함께 사용하는 타사 의존성입니다.안드로이드 메이븐 플러그인

문제는 내 휴대 전화/에뮬레이터에서 최종 apk를 실행할 때 NullPointerException이 발생합니다. 내 코드 (ab 등의 난독 화 된 클래스)는 이러한 제 3 자 종속성에서 난독 화 된 메소드 및 클래스를 호출하지만 클래스 이름은 이제 다릅니다 (예 : Foo라는 클래스는 여전히 Foo입니다. 왜냐하면 난 그것을 모호하지 않기 때문입니다. 하지만 실제 코드는 다른 것을 호출합니다.)

누구나 이런 종류의 설정을 사용할 수 있습니까? 이 제 3 자 라이브러리도 난처하게해야합니까?

답변

1

제 3 자 라이브러리를 유지하는 것이 항상 필요한 것은 아니지만 문제가 발생한 경우 좋은 첫 번째 단계입니다.

처리 된 코드가 일련 화 된 데이터와 호환되지 않는 경우에도 JSON 직렬화/직렬화 해제에 여전히 문제가 발생할 수 있습니다. 그런 다음 ProGuard를 제거하거나 이름을 변경하지 않도록 직렬화 된 클래스와 필드를 유지해야합니다.

마찬가지로 주석이 달린 클래스, 필드 및 메서드가 제거되거나 이름이 바뀌면 Spring에 문제가 발생할 수 있습니다. 당신은 그들을 지켜야합니다. 또한 주석에게 자신을 유지해야한다 :

-keepattributes *Annotation*,Signature 

기본적으로 항상 ProGuard에서 그것을 예견하지 못했습니다 및 코드의 일부를 제거하거나 이름을 변경했기 때문에 실패 반사의 문제입니다. NullPointerException의 스택 추적은 어디에서 볼 것인지에 대한 자세한 정보를 제공해야합니다.

자세한 내용은 cfr. ProGuard 설명서>Troubleshooting.

관련 문제