2015-01-07 2 views
0

libgdx를 사용하여 Java에서 크로스 플랫폼 애플리케이션을 만들고 있습니다.java.lang.NoSuchMethodError : org.json.JSONObject.getNames (충돌 라이브러리로 인해 Android에 있음)

E/AndroidRuntime(2030): java.lang.NoSuchMethodError: org.json.JSONObject.getNames 

나는 주위를 읽고 나는 안드로이드가로 같은 패키지 이름을 사용 JSON 라이브러리에 내장 된 것을 발견 : 나는이 오류를 받았을 때 나는 핵심 프로젝트에 JSON을 사용하고 안드로이드에 배포하려고했다 핵심 프로젝트에 추가 한 Json 라이브러리 내가 사용하는 라이브러리에는 getName() 메소드가 있고 Android 라이브러리에는 name() 메소드가있다. 사용할 라이브러리를 지정하는 방법이 있습니까? 또는 Android 라이브러리를 무시하는 방법이 있습니까?

업데이트 : 내가 널 부여해야

JSONObject.getNames(TEST); 

를 사용하여 내 안드로이드 프로젝트에서 JSON 방법을 접근 테스트, 대신 나에게 같은 오류를했다.

+0

.java 파일에서 가져온 라이브러리를 확인하십시오. 사용하는 라이브러리가 괜찮 으면 좋겠지 만 원시 파일 인 경우 그 원인이라고 생각하면 제거해야합니다. –

+0

내가 말한 것은 그들이 둘 다 동일한 패키지 이름을 가지고 있기 때문에 전선이 어딘가에 교차되어 있고 앱이 내가 추가 한 라이브러리 대신 실수로 안드로이드 라이브러리를 사용한다고 생각합니다. 그들은 모두 org.json을 사용합니다. * – eBehbahani

+0

당신이 필요로하는 것만 가져 오면 아무런 문제가 없으며, 그렇게했다면 문제가 다른 것으로부터 발생하고 있는지 확인하십시오. –

답변

2

다른 네임 스페이스/패키지 이름을 사용하는 lib를 사용하는 경우 클래스 작성자가 자발적으로 이름을 지정하여 클래스를 찾을 수있는 첫 번째 위치를 선택합니다.

그래서 이것을 피하는 가장 쉬운 방법은 android에서 사용한 것과 동일한 라이브러리 및 버전을 사용하거나 다른 패키지에서 라이브러리를 옮기는 것입니다.

해당 라이브러리가 라이센스 (라이센스 등)를 허용하고 합리적으로 작은 경우 프로젝트의 소스 파일을 가져 와서 IDE가 리펙토링 매직을 수행하는 것이 더 쉬울 수도 있습니다. 또한 jarjar 같은 도구가 있습니다.

SO (Calling same Method having same packageName From Different JARs, Java, Classpath, Classloading => Multiple Versions of the same jar/project)에 대한 몇 가지 질문이 있습니다. 그래서 당신은이 문제를 피할 수 있을지도 모르지만, 내 직감은 당신이 큰 혼란에 빠지게 될 것이라는 것입니다.

관련 문제