2017년 10월 10일 화요일

Android Studio에서 Sherlock 라이브러리 사용 시 No such field error

참고 사이트
1. 문제 해결 https://stackoverflow.com/a/3960442

2. 라이브러리 모듈 추가하기 https://bonoogi.postype.com/post/1295

이클립스시절 오래된 프로젝트를 가져와서 Firebase 기반으로 바꿔서 컴파일만 하는데도 다음과 같은 오류가 나면서 되지 않았다. 오류는 Actionbar Sherlock UI 라이브러리에서 발생하였음.

java.lang.NoSuchFieldError: No instance field mFragments of type

해결법을 요약하자면 aar형태의 라이브러리 대신 java 소스코드를 프로젝트에 추가하고
Watson.java에서 mFragments 변수 대신 새로 멤버 변수를 선언(FragmentManagerImpl)해서 바꿔준다.
AmimatorProxy.java 에서는 FloatMath를 Math로 바꿔야 한다. (import는 java.lang.Math이다.)

자세한 내용은 1번 링크의 답변을 참조할 것.

다운받은 라이브러리는 압축을 풀고 2번 링크를 참조하여 추가한다. (Import Module)
성공하면 아래 그림과 같은 프로젝트 창을 볼 수 있다


gradle에서 설정 바꾸기
기존 설정은 dependencies { ... }  에서
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
로 되어있을 것이다

프로젝트 내에서 모듈로 추가했으니 이렇게 바꿔준다.
compile project(':actionbarsherlock')


Clean Project하고 다시 빌드하여 해결완료.