JNI 를 이용한 안드로이드 프로젝트를 만들고 있습니다.
근데 외부 JAR파일을 추가시키면 콘솔에 이런 문구가 나오더군요
Dx warning: Ignoring InnerClasses attribute for an anonymous inner class that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.
게임센터같은 모듈인데 초기화조차 되지 않고요. 모듈에 포함된 기능이 하나도 먹질 않네요..
JNI가 아닌 순수 안드로이드 프로젝트에서 실행하면 문제없이 잘 됩니다.
두개의 프로젝트 모두 같은환경에서 테스트하였습니다.
컴파일러는 1.6을 사용하며 퍼미션이나 SDK버전 등등 똑같이 세팅해주었습니다.
C++단에서 라이브러리를 인식하게 해주어야 하는 걸까요??ㅜㅜ
아니면 System.loadLibrary 에서 so라이브러리를 로드하면
그 외에 것은 무시하는걸까요...
ps. 아 혹시 빌드패스메뉴에 Migrate JAR File.. 요거 무슨 용도인지 아시는분 계시나요?? (책에도 없는...)




Android 에서는 class를 dx 컴파일을 해서 사용합니다.
해당 jar는 구형(?) java sdk 에서 compile 되서 묶인 것으로 보이구요.
따라서 dx warning 이 발생하는 것 입니다.
문제가 되는 class file은 당연히 제대로 동작하지 않습니다.
해당 내역을 없애시고 싶다면, 소스가 공개되어 있다는 전제하에
소스를 받아서 컴파일 해서 다시 jar로 묶어서 사용하면 됩니다. 물론 컴파일
에러를 내는 부분도 있을 겁니다. 그런 부분은 부분 수정을 하시거나, 제거해야합니다.
일례로, log4j 의 최신 소스를 불필요한 파일을 제거하고, 묶어서
해당 메세지를 나오지 않게 하고 사용한 적이 있습니다.