문제상황:
개발중인 앱에 대하여 Firebase console의 Test lab을 통해 테스트한 결과 Firebase Firestore data에 접근하는 모든 부분에서 에러가 발생하였다.
해결방법:
Firestore,Firestoarge변수를 private이 아닌 public으로 설정해주고(find usuage 이용),
gradle에서 난독화 설정을 true -> false로 바꾸어주어 해결
원인분석:
1. 우선 이 두 에러는 디버깅버전으로 빌드했을때는 나타나지 않고 릴리즈 버전에서 발생한 버그이다. 그러므로 둘의 환경적인 차이에서 발생한 버그일 것이다.
2. 첫 번째 사진의 에러 로그에 나온 serializable의 개념을 알아보자. serializable은 자바 내부의 객체나 데이터를 외부 자바 시스템에서도 사용하기위해 byte 형태로 직렬화하는 것이라고 한다. 이는 클래스에 Serializable interface 를 implement하는 방식으로 사용된다.
프로젝트 실행 과정에서 작성된 글을 수정하는 액티비티를 실행시킬 때 기존의 글을 edittext로 넘겨줄 필요가 있었다. 이를 위해 글의 정보를 담는 모델인 post class의 데이터를 넘겨주기 쉽게 Serializable을 implements했다. 이를 바탕으로 로그를 해석해보면 post 클래스객체에 Serializable할 요소가 없다고 해석된다.
3. public 접근제한자는 서로 다른 패키지간에도 클래스를 사용할 수 있고, private접근제한자는 그 클래스 내부에서만 객체를 만들고 사용 할 수 있다.
--> 1,2,3에 의해 릴리즈 버전에서 firestore 변수를 private으로 지정해 변수에 접근할 수 없어서 객체가 null로 인식되는 것이 원인이라고 추측할 수 있다.
하지만 공식문서에서 private를 사용하고 있고, 릴리즈버전에서 가장 제한이 약한 public을 써야하는 정확한 이유는 모르겠다.
4. minifyEnabled 를 true로 하면 구성에 따라 일부 모델의 메서드가 제거될 수 있다고 한다.
-->해결은 되었지만 난독화가 적용되지 않아 디컴파일에 취약해질 수 있지 않나 하는 생각이 든다.
참고링크:
https://nesoy.github.io/articles/2018-04/Java-Serialize
Java의 직렬화(Serialize)란?
nesoy.github.io
https://stackoverflow.com/questions/37743661/firebase-no-properties-to-serialize-found-on-class
Firebase No properties to serialize found on class
I'm bloqued creating a Firebase Database. I'm trying to model a class. A very simple class: package com.glups.model; import com.google.firebase.database.IgnoreExtraProperties; @IgnoreExtraProp...
stackoverflow.com