2017-10-14 5 views
0

Android 개발에서 새로 생겼습니다. 일반 EE Java 및 Gradle에서는 그리 새로운 것은 아닙니다.Android 앱의 종속성 ClassNotFoundException

그래서 Android 용 REST 소비자 앱을 만들려고합니다. 나는 (DTOs와 api 소비자를 포함하고있는) (1) .jar 파일이 필요하다. 그것 (1) .jar는 Nexus repo의 다른 (2) 항아리에 의존합니다. 이것들은 (2) maven repos에서 다른 (3) 항아리 (예를 들어 아파치 공유 lang3 등)에 의존합니다.

재미있는 점은 ... 앱이 컴파일되고 설치된다는 것입니다. 그러나 런타임에 occasionaly는 (1) (적어도 (1) ​​- (2) 및 (3)에 대해서는 아직 몰라서) 일부 수업을 잃는 경향이 있습니다.

나는 그 질문에 사진을 좋아하지 않는다는 것을 알고 있지만,이 경우 나는 사진 = 선명함을 믿는다.

아래를 참조하십시오. 동일한 런타임, 동일한 항아리. 클래스 중 하나가로드되지 않고 옆에있는 다른 클래스가 사용 가능합니다.

Some classes are not seen by the classloader

And some are seen

왜 그런가요? 나는 무엇을 잘못 했는가?

한 가지 더 ... 주 활동 (onCreate())에 누락 된 클래스 중 하나 (둘 이상 있음) 중 하나를 인스턴스화하려고하면 해당 클래스가 클래스 경로에 나타나고 올바르게 개체가 만들어집니다. 그러나 우스꽝스럽게 말하면 다른 수업은 실종 될 수도 있습니다! Classloader는 처리 할 수있는 클래스에 대해 제한된 수의 슬롯을 가지고있는 것처럼 느낍니다.

편집 : 좋습니다. 웬일인지 gradle은 (1) .jar 파일을 생성 된 .apk 파일에 포함하지 않기로 결정했습니다. ... 이유가 무엇입니까?

거들 4.1. Linux Mint 18. Android Studio 3.0 Canary 8

왼쪽으로 디 컴파일 된 APK 구조; 아마 원래의 병 enter image description here

답변

0

ProGuard를 활성화했을 것입니다. ProGuard는 사용하지 않는 클래스를 최종 .apk에서 제거합니다. ProGuard

+0

'minifyEnabled'는'false'로 설정됩니다. 전체'release' 블록을 주석으로 시험해 보았습니다 - 여전히 운이 없음 – netikras

관련 문제