BloByJames

날 미치게 하는 Exception: io.realm.exceptions.RealmError: Unrecoverable error. 본문

프로그래밍/안드로이드

날 미치게 하는 Exception: io.realm.exceptions.RealmError: Unrecoverable error.

blobyjames 2016. 11. 8. 22:33

 Fatal Exception: io.realm.exceptions.RealmError: Unrecoverable error.  /data/data/<package>/files/<realm file>: Encrypted interprocess sharing  is currently unsupported.SharedGroup has been opened by pid: xxxx.  Current pid is xxxx. in /Users/cm/Realm/realm-java/realm/realm-  library/src/main/cpp/io_realm_internal_SharedRealm.cpp line 81 at  io.realm.internal.SharedRealm.nativeGetSharedRealm(SharedRealm.java) at  io.realm.internal.SharedRealm.getInstance(SharedRealm.java:178) at  io.realm.internal.SharedRealm.getInstance(SharedRealm.java:155) at  io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:124) at  io.realm.Realm.getDefaultInstance(Realm.java:210)




Realm에서도 많은 reporting이 있었습니다.


Encrypted interprocess sharing is currently unsupported in io_realm_internal_SharedGroup.cpp #1477


error를 보아하니, 현재 실행중인 pid와 기존에 사용 되었던 pid간에, 암호화 된 file을 공유하지 못하는 것 같습니다.


아래는, 현재 제가 개발에 참여한, 한 service의 crash report입니다.


아놔, 환장합니다.


13k는...

13,000!!

13,000!!

13,000!!!!


안타깝게도 모든 단말기에서 발생하는 issue는 아닙니다.
하지만, 히당 issue가 발생하는 단말기에서는 100% 재현되며,
평소 사용 습관에 따라서는 1000% 재현됩니다. ㅠㅠ


오늘도 야근과 함께...

라고 생각했지만, 생각보다 쉽게 답을 찾을 수 있었습니다.


제가 issue를 해결한 방법을 알려드리자면,


...
Realm realm;
try {
    realm = Realm.getDefaultInstance()
} catch(RealmError e) {
    RealmConfiguration config = new RealmConfiguration.Builder()
                                .deleteRealmIfMigrationNeeded()
                                .build()
    realm = Realm.getInstance(config);
}
...

물론 RealmConfiguration 설정은 기존에 사용하던 설정과 똑같이 맞춰야겠죠?
(중요하지 않다고 하시는 분들이라면 상관 없지만..)


Realm을 사용하며 큰 장점과 더불어 crash 신세계를 경험하고 있습니다.


수많은 삽질 troubleshooting으로 왠만큼 Realm을 숙지하여,
차기 project에서는 큰 탈 없이 사용할 수 있게 되었습니다.


감사합니다.

Comments