ADT업데이트 후 혹은 이클립스 재설치후 빌드만 다시했을 뿐인데 갑자기 멀쩡하던 앱이 죽기 시작합니다. 난 아무것도 한게 없는데 왜 이런 시련이 왔을까요? 과연 무엇이 문제일까요? 원인 이름 그대로 Class가 패키지에 함께 포함되지 않아서 발생한 문제입니다. 무엇이 이 문제를 발생시켰을 까요? ADT가 업데이트되면서 의존성을 체크하는 루틴이 크게 변경되었습니다.(자세한 내용는 요기 참고하세요. Android 프로젝트 의존성 처리 방식 변경 ) 기존 jar를 추가하면서 이클립스에서 build path를 추가했던것 기억하시죠? 수동 Build Path추가 일반적인 경우 libs 폴더에 jar프로젝트를 넣어두고 이렇게 수동으로 빌드패스를 추가해서 사용해 왔습니다. 그런데 이번 ADT업데이트 이후에 Android Dependencies가 만들어지면서 libs내의 jar를 자동으로 빌드패스에 추가가 됩니다. 이 jar들은 배포시에 함께 패키징 됩니다. 그럼 아무런 문제가 없지 않느냐? 맞습니다. libs폴더에 기존에 jar파일들을 넣어 두셨다면 문제가 발생하지 않습니다. libs 대신에 lib 폴더(또는 다른폴더)에 jar를 넣어두었기 때문에 NoClassDefFoundError가 발생하게됩니다. 해결방법 1) 가장 쉽고 옳은 방법 기존에 jar가 들어있는 폴더이름을 libs 로 변경하세요. 폴더를 libs로 변경하신후 기존 ADT r16이하를 사용하는 개발자 분들을 위해서 수동으로 빌드패스를 추가해주셔도 좋습니다. 하지만 공동 개발자들의 수가 그리 많지 않다면 ADT를 r17로 업데이트 하는게 더 좋은 방법입니다. (ADT r17버전은 기존 버전보다 개선사항이 매우 많습니다. http://developer.android.com/sdk/eclipse-adt.html , SDK Tools업데이트도 꼭 함께 해주세요.) 2) 쉽지만 안좋은 방법 안드로...
글
이 글은 아래 링크의 대한 번역글입니다. http://tools.android.com/recent/dealingwithdependenciesinandroidprojects 이번(r17) Android SDK 부터 안드로이드 프로젝트에서 라이브러리 의존성을 체크하는 방식이 개선되었습니다. 먼저 Ant-based 빌드 시스템과 이클립스 플러그인이 동일하게 동작하도록 변경되었습니다. 프로젝트는 소스폴더와 라이브러리 프로젝트, jar파일 의존성을 갖습니다. 이제 라이브러리 프로젝트를 project.properties 에 넣기만 하면 자동으로 다음 경로들에서 의존성을 찾아 냅니다. 프로젝트의 libs/*.jar 라이브러리 프로젝트의 생성물 라이브러리 프로젝트의 libs/*.jar 위 항목들과 프로젝트 소스의 컴파일 결과물이 함께 dex에서 처리되어 APK를 생성하게됩니다. 프로젝트들간에 동일한 jar를 사용하는 여러 라이브러리를 포함할 수 있기 때문에 빌드시스템은 모든 경로에서 jar를 찾아내 중복되는 jar를 제거합니다. 이로 인해 흔히 보았던 문제인 "already added"가 더 이상 발생하지 않을 것입니다. 중요한 변경사항 : 라이브러리 프로젝트가 R 클래스를 생성하고 패키징 하는 방식이 변경됨! 더 이상 R 클래스가 라이브러리 프로젝트의 jar 에 포함되지 않습니다. 라이브러리 프로젝트는 그들이 의존하는 라이브러리 프로젝트의 R클래스를 만들어 내지 않습니다. 메인 앱 프로젝트가 라이브러리에 포함된 R클래스를 그들 자체의 R클래스와 함께 만들어 집니다. 이것은 이제 라이브러리 프로젝트가 의존하는 다른 라이브러리 프로젝트의 R클래스를 가져오지 못함을 의미합니다. 이제는 앱의 R클래스가 모든 필요한 리소르를 모두 포함하고 있기 때문에 이는 더이상 필요하지 않습니다. (주 : 라이브러리 프로젝트에서 다른 라이브러리 프로젝트의 리소스를 참고가 더이상 불가능함을 의미합니다.) ...
- 공유 링크 만들기
- X
- 이메일
- 기타 앱