2014-11-11 8 views
0

잠시 동안 앱을 개발 해왔고 (Android 기기와 에뮬레이터에서 두 가지 테스트를하고 있습니다.ART 단위 테스트가 실패합니다. Dalvik은 정상적으로 작동합니다.

현재 트래비스에 빌드가 설치되어 있고 모든 테스트가 정상적으로 실행 중입니다. 또한 로컬 에뮬레이터를 설치하면 모든 것이 올바르게 실행됩니다. 내 물리적 장치 (Moto X)는 Dalvik에있을 때만 모든 것을 잘 실행합니다. 그게 도움이 경우

11-11 15:28:54.013 6259-6259/org.bspeice.minimalbible E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: org.bspeice.minimalbible, PID: 6259 
    java.lang.NoClassDefFoundError: org.jdom2.xpath.jaxen.JDOMCoreNavigator 
      at java.lang.Class.classForName(Native Method) 
      at java.lang.Class.forName(Class.java:305) 
      at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:88) 
      at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:39) 
      at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:50) 
      at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:47) 
      at android.test.SimpleCache.get(SimpleCache.java:31) 
      at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:72) 
      at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48) 
      at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61) 
      at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55) 
      at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:156) 
      at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:117) 
      at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:102) 
      at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:366) 
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4400) 
      at android.app.ActivityThread.access$1500(ActivityThread.java:139) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5086) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 

here 이상 전체 세션 추적이있다 : 최대한 빨리 ART로 전환, 나는 다음과 같은 오류가 발생합니다.

내 질문은 : 이것이 Dalvik이 아닌 ART의 문제 일 수있는 이유가 있습니까? 나는 앱 구축 프로세스를 전혀 변경하지 않았다. 차이를 만드는 유일한 변수는 Dalvik/ART이다. 앱 자체가 정상적으로 실행되며 오류가있는 테스트 만 수행됩니다.

답변

0

ART가 클래스를 찾지 못하는 것 같아 ClassNotFoundException이 발생했습니다. 나는 java 나 cpp에 익숙하지 않지만, ART에 대한 나의 독서에서는 구문에 훨씬 더 엄격하다. Dalvik은 점이나 슬래시를 구분 기호로 사용하고 ART는 슬래시 만 허용합니다. 나는 Dalvik에서 잘 작동하지만, ART/Android-5.0.x에서 쓰러져 죽는다. 직접이 문제를 해결 했습니까? 앞으로 몇 주 안에, 나는 내 애플 리케이션에 무엇이 잘못되었는지 알아보기 위해 노력할 것이지만, 나는 Dalvik에 비해 ART가하고있는 공격적 메모리 관리 가비지 콜렉션이라고 생각한다. 문제를 해결 한 경우 수행 한 작업을 나타내는 메모를 게시하십시오.

+0

저는 Robolectric를 테스트 용으로 사용하고 에뮬레이터 테스트를 완전히 제거했습니다. 귀하의 설명을 이해할 수 있을지 모르겠습니다 - ART는 Java 런타임에 불과하며 Dalvik과 다른 구문을 사용합니다. 또한 메모리 관리는 클래스를 찾을 수 없다는 데 아무런 영향을 미치지 않습니다. –