오랜만에 루팅크라운 클라이언트를 실행하다보니 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에서는 확실하게 바로 날리기 때문에 문제가 발생한다.
물론 이렇게 하는 사람이 몇이나 될까하지만 예전에 짜둔 코드를 되집어 실행하다보면 왜 안될까? 어처구니 없는 과거의 실수와 마주치게 된다.
ㅎㅎ;
'Game Programming' 카테고리의 다른 글
샤이니 베이비 - 방청소 대작전 (0) | 2018.04.22 |
---|---|
[Live-coding] 게임혼과 함께하는 라이브코딩 -1- JumpGame 만들기 (소스공개) (0) | 2018.04.10 |
루팅 크라운 일어버전 (0) | 2017.09.08 |
iOS와 Android간의 AES 차이 (0) | 2017.08.08 |
iOS의 SecKeyGeneratePair와 Java의 KeyFactory의 차이 (0) | 2017.08.04 |