[Unity3D] AR core 이용해서 빌드한 파일이 자꾸 실행 중지될 때

zmin·2021년 12월 8일
0
post-thumbnail

프로젝트가 AR 프로젝트라서 당연히! AR 개발을 해야하니까 해당 환경이 잘 돌아가나...확인하기 위해 테스트로 빌드를 해보고 실제 기기에서 테스트 해봤다.
(안드로이드 스튜디오 에뮬레이터를 써보려고 했는데 이유를 모르겠으나 설치가 안돼서 포기했다)

근데 당연히 잘 되진 않았고 두 번의 '계속 종료됨'을 마주했다.
정확히 말하면 아예 화면이 켜지기도 전에 다시 꺼졌다.폰실행
근데 해결함!

우선 사용한 유니티 버전과 각 패키지 등...을 적자면 다음과 같다.

Unity : 2020.3.23f1
AR Foundation : 4.1.7
ARCore XR Plugin : 4.1.7
테스트 기기 : Samsung Galaxy S10+ / android11


32bit 빌드 vs 64bit 빌드

필수적으로 바꾸어 주어야하는 것들을 전부 바꾸었는데도 아예 켜지질 않아서 무슨 문젠가 했는데 어플은 32bit로 빌드가 되었는데 핸드폰이 32bit가 호환이 안되는 핸드폰이었다.

체크박스로 아주 간단하게 위 문제를 해결할 수 있었음
Unity는 32bit 빌드가 기본이라(아마도) 이 부분을 확인해 주는 것이 중요할 것 같다
project setting > Player > (android)Configuration > ARM64 체크
ARMv7의 경우 우리는 32bit체제에선 ARCore가 작동을 안하는 것으로 알아서 체크 해제를 해주었다
그리고 64bit 빌드를 사용할 경우 바로 위의 Scripting Backend 의 값을 IL2CPP로 바꾸어 주어야한다. (근데 아마 이것 때문에 뒤에서 문제가 발생하는 듯)


고쳤는데도 안뜨는데...

IL2CPP에서는 ARCore가 작동하지 않는다는데...사실 정확한 이유는 잘 모르겠다. 공부할 필요를 여기서 느꼈다ㅠ
아무튼 해결한 방법은 이 포럼에서 찾을 수 있었다. IL2CPP의 문제라는데...

IL2CPP? mono?

스크립트 벡엔드라고 하는데 사실 잘 이해는 못했으나...
Unity의 경우 C#을 이용하여 스크립트를 작성하게 되는데 이 코드 그대로 기기에서 실행하는 것은 아무래도 무리가 있기 때문에 이를 기계어로 변환해주어야한다.
mono의 경우 C#코드를 IL(Intermediate Language)로 변환하고 이를 다시 기계어로 번역하여 전달해주게 되고,
IL2CPP는 C#코드를 IL로 변환하는 것까지는 동일하지만 말 그대로 IL을 C++로 변환하게 된다.
결국 다시 고급언어로 돌아와 헛수고 했다고 생각할 수 있지만 요즘 대부분의 기기는 C++ 컴파일러(고급언어→기계어)를 가지고 있기 때문에 우리가 따로 기계어로 번역해주어야 할 필요가 없는 것이다.
아무래도 그게 그거같은데 찾아보니 IC2CPP가 보안상으로 우수하고 우리가 기계어로 번역할 필요가 없어 빠르다는 장점이 있으며 64비트 체제와 호환이 된다는 장점이 있기 때문에 사용하는 것 같다.

위가 mono방식, 아래가 IL2CPP, 출처는 클릭 시 이동


아무튼 해결방안은 Asset 폴더에 아래 내용을 가진 link.xml 파일을 추가하는 것이다. (만약 이미 존재한다면 수정해주면 된다. preseve"none"에서"all" 로 바꿔주면 된다고 나와있다.)

<linker>
  <assembly fullname="Unity.XR.ARCore" ignoreIfMissing="1" preserve="all"/>
  <assembly fullname="Unity.XR.ARKit" ignoreIfMissing="1" preserve="all"/>
  <assembly fullname="Unity.XR.ARFoundation" ignoreIfMissing="1" preserve="all"/>
  <assembly fullname="Unity.XR.ARSubsystems" ignoreIfMissing="1" preserve="all"/>
</linker>


Unity Technologies인 tdmowrer라는 분이 link.xml을 수정하라고 했지만 난 아예 그 파일자체가 없어서 스레드 글들을 참고해 추가했다..2019년에 next release에 고쳐질 거라고 했으면서........
+)사용하지 않는 모듈들을 이 link.xml파일에서 거를 수 있다는데 그 부분이 preserve 부분인 것 같다. 우선은 급해서 전부 복붙했는데 우리 프로젝트 같은 경우는 ARKit는 사용하지 않으니 그 부분 수정하여 한 번 더 테스트 해봐야 할 것 같음


정말 울 뻔했다... 심지어 난 ios 유저라...ㅠㅠ 가족들한테 테스트 좀 해달라고 많이 과장해서 팔천번은 부탁한 것 같다..........이제 한시름 놨으니까 또 열심히 해야지..

profile
308 Permanent Redirect

2개의 댓글

comment-user-thumbnail
2022년 4월 28일

저는.... link.xml 이라는 파일 없어도 arcore 작동이 잘 되는데요...
무슨 차이일까요?

유니티 버전은 2020.3.14 입니다.

답글 달기
comment-user-thumbnail
2023년 11월 12일

감사합니다 덕분에 해결했습니다!

답글 달기