타올라라 게임혼! www.gamehon.com

오랜만에 루팅크라운 클라이언트를 실행하다보니 art 시스템에서 오류가 나오는 문제가 생겼다.


신기하게도 안드로이드 업데이트 이전에는 괜찮았는데 업데이트 이후에 이런 문제가 발생한다.


1. is missing DT_SONAME will use basename as a replacement:

- 이건 그냥 경고 정도로 보면 된다.


2. JNI DETECTED ERROR IN APPLICATION: jclass is an invalid local reference

- 이건 골치아픈 문제이다. 대부분의 경우 2가지로 나뉘어지는데 multidex 처리가 아니라면 구형 sdk를 사용하다가 런타임이 art로 변경되면서

생기는 문제일 것이다.


대표적인 경우가 LocalRef 처리에서 엄격함을 무시했기 때문으로 볼 수 있는데, localref취득 후 릴리즈를 해주어도 이전에는 함수 안에서는 사용에 문제가 없었다. count 자체가 dalvik과 art가 바뀌어서라기 보다는 엄격함이 추가되었기에 이런 경우가 생긴다.


jclass class_activity = g_env->GetObjectClass(activity->clazz);


이런식으로 jclass 취득 후, CallStaticObjectMethod를 사용한다면 이전에는


CallStaticObjectMethod 앞에 DeleteLocalRef(class_activity)를 해두어도 문제가 없지만 art에서는 확실하게 바로 날리기 때문에 문제가 발생한다.


물론 이렇게 하는 사람이 몇이나 될까하지만 예전에 짜둔 코드를 되집어 실행하다보면 왜 안될까? 어처구니 없는 과거의 실수와 마주치게 된다.


ㅎㅎ;

Comment +0