2014-05-22 2 views
1

semantics3 api를 사용하는 안드로이드 응용 프로그램에서 작업하고 있습니다. semantics3 라이브러리에는 기능에 중요한 org.json 패키지가 포함되어 있습니다. org.json 클래스와 함수를 사용하는 코드는 모두 API에 포함되어 있으며 Android 애플리케이션에서 독립 실행 형으로 작동합니다.android.jar에서 패키지를 제거하려면 어떻게해야합니까?

내가 알 수있는 한 문제는 android.jar도 org.json이라는 패키지를 포함하고 있지만 semantics3 org.json보다 기능이 적다는 것입니다. 응용 프로그램 내에서 semantics3 API를 호출하려고 할 때, 나는 다음과 같은 오류 얻을 :

05-22 12:06:07.058: W/System.err(6108): java.lang.NoSuchMethodError: org.json.JSONTokener.<init> 
05-22 12:06:07.058: W/System.err(6108):  at com.semantics3.api.Semantics3Request.fetch(Semantics3Request.java:70) 
05-22 12:06:07.058: W/System.err(6108):  at com.semantics3.api.Semantics3Request.runQuery(Semantics3Request.java:143) 
05-22 12:06:07.058: W/System.err(6108):  at com.semantics3.api.Semantics3Request.get(Semantics3Request.java:162) 
05-22 12:06:07.058: W/System.err(6108):  at com.semantics3.api.Semantics3Request.get(Semantics3Request.java:154) 
05-22 12:06:07.058: W/System.err(6108):  at com.semantics3.api.Products.getProducts(Products.java:21) 
05-22 12:06:07.058: W/System.err(6108):  at com.cs194.windowshopping.ProductSearch.findKeywordSearchResults(ProductSearch.java:132) 
05-22 12:06:07.058: W/System.err(6108):  at com.cs194.windowshopping.ProductSearch.queryByPicture(ProductSearch.java:66) 
05-22 12:06:07.058: W/System.err(6108):  at com.cs194.windowshopping.ResultsActivity$PopulateResultList.doInBackground(ResultsActivity.java:116) 
05-22 12:06:07.058: W/System.err(6108):  at com.cs194.windowshopping.ResultsActivity$PopulateResultList.doInBackground(ResultsActivity.java:1) 
05-22 12:06:07.058: W/System.err(6108):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
05-22 12:06:07.068: W/System.err(6108):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
05-22 12:06:07.068: W/System.err(6108):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
05-22 12:06:07.068: W/System.err(6108):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
05-22 12:06:07.068: W/System.err(6108):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
05-22 12:06:07.068: W/System.err(6108):  at java.lang.Thread.run(Thread.java:841) 

을 나는 내 질문에 내가 내 응용 프로그램이 올바른 org.json 패키지를 사용하는지 확인 어떻게 추측? 또는 android.jar에서 org.json 패키지를 제거하여 semantics3.jar에있는 패키지 만 존재하도록하려면 어떻게해야합니까?

+0

동일한 패키지가 2 개있는 경우 코드에 클래스를 추가 할 때 가져올 패키지를 지정해야합니다. 코드 맨 위에서 선택할 패키지를 수동으로 입력 할 수도 있습니다. – MJ93

답변

1

당신은 GitHub의에서 프로젝트를 포크 할 수 있습니다 https://github.com/Semantics3/semantics3-java

소프트웨어 (예 : org.jsonplus하기 위해 이름을 변경) 당신이 semantics3에서 org.json을 재 포장 할 수 있도록 MIT는 라이센스이며, 당신은하지 말았어야 Android의 모든 문제. 좋은 Java IDE를 사용하면 1 분 정도 밖에 걸리지 않습니다. 물론 새로운 패키지를 사용하려면 클라이언트 코드도 변경해야합니다.

+0

고맙습니다. 훌륭한 제안입니다. 알았어. – JMTron

1

I guess my question is how do I make sure that my application uses the right org.json package?

그렇지 않습니다. 펌웨어가 항상 승리합니다. 마음에 드는지 여부와 관계없이 Android의 org.json 사본을 사용합니다.

제 3 자 JAR에서 org.json 클래스를 제거하고 사용 된 정보가 Android의 자체 사본과 호환되기를 바랍니다. 그렇지 않은 경우 공급 업체에 Android 호환 버전의 JAR을 제공해야한다고 불평하십시오.

1

아니요 시스템의 다른 것들 (예 : 공급 업체가 제공 한 앱)이 필요하기 때문에 android.jar에서 클래스를 제거하려고합니다. 이전 모토로라 및 htc 장치에서 org.json과 똑같은 문제가있었습니다.

솔루션 :

  1. 사용 jarjar는 jar 파일의 경로를 엉망입니다.
  2. 또는 수동으로 hgoebl로 다시 패키지하십시오. 말하는.

JarJar 방법

java -jar jarjar.jar process rulesFile.txt semantics3.jar semantics3-jarjar.jar 

rulesFile.txt

rule [email protected] rule [email protected] 

JarJar https://code.google.com/p/jarjar/wiki/CommandLineDocs

이를 자동화하는 받는다는 플러그인이 있습니다.

관련 문제