기본 콘텐츠로 건너뛰기

[Android, Java] Error / Warning

    목차

Data binding

[Error] is not abstract and does not override abstract method

<에러문의 형식> (귀찮아서 패키지와 소스명은 밝힌다.)

error: FragmentConfirmBindingImpl is not abstract and does not override abstract method setFr_event(ConfirmFragment.ConfirmFragmentEvent) in FragmentConfirmBinding
error: cannot find symbol variable mFrEvent

  • 데이터 바인딩 대상 Java : ConfirmFragment.java

  • xml 파일 이름 : fragment_confirm.xml

  • Binding 변수이름 : FragmentConfirmBinding

  • 빌드 후 생성되는 코드 : FragmentConfirmBindingImpl

  • xml에 선언한 데이터를 저장하기 위한 세터 : setFr_event(ConfirmFragment.ConfirmFragmentEvent)

  • xml 내부의 데이터 선언 방식

<data> 
    <variable
        name="fr_event"
        type="패키지 주소.ConfirmFragmentEvent" /> 
</data>

계속 빌드가 안되서 stackoverflow 찾아봐도 “Gradle 설정 하세요, Java에서 변수 명 바꾸세요.” 같은 개소리 밖에 없었음 xml의 variable의 name을 변경해보자 하고 생각해서 변수를 “fr_event” -> "fr"로 변경해봄

갑자기 빌드가 된다…

다른 변수명으로 바꾸어서 디버깅 해보니 언더바 “_” 이녀석이 들어가면 빌드가 되지 않는다.
※ 임의로 다른 프로젝트에서 생성 후 테스트 해보니 (정말 짜증날 정도로) 멀쩡하게 잘된다.
아무래도 데이터 바인딩을 이용할 때는 첫 단추의 중요성이 매우 크다.

(Invalidate cache, Clean project가 잘 안먹힌다. 몇 년전에 안드로이드 스튜디오를 다시 설치 하기도 했다.)

[Error] 아무 이유 없는 갑작스러운 빌드 에러

잘 되는 것이 갑자기 안되는 경우도 있다. 심지어 R error도 동반하기도 한다.
기본적으로 안드로이드 클리닝 명령 3종 세트 (Invalidate Caches / Restart, Clean Project, Rebuild Project)
를 실행해도 안되는 경우도 존재한다.

해결방법으로는 xml의 view id 값을 변경하는 방법이 있다. (Refactoring 기능에 취약한 Data binding에서는 권장하고 싶지는 않다.)

그리고 최근에 발견한 방법으로는 Gradle 설정을 건드리는 것인데, build.gradle (Project:Project)에서 gradle 버전을 다운그레이드 하거나, sdk를 다시 설치하거나(Sdk build tool) 버전을 변경하는 것이다.


signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000008

본인의 경우에는 화면 Rotation시 View를 다시 그려야해서 onDestroy를 호출할 수 밖에 없었는데, 이 과정에서 스레드가 제대로 종료되지 않아서 발생함.


XML Rendering problem

  • 방법 1. ID나 Attribute의 철자가 맞는지 확인 (대소문자 구분 하니까 잘 봐야한다.)
  • 방법 2. gradle 설정에서 안드로이드 서포트 라이브러리의 버전을 다운그레이드 한다. (이를 위해서는 compileSdkVersion도 같이 낮추어야한다.

댓글