- 안영기의 개발실 -: 20190512 기간의 글 목록http://smgal.ismine.net/tc_191/blog1/게임 개발을 기반으로 한, 잡다한 개발 기록 저장소2020-05-07T03:07:47+09:00Textcube 1.9.1[Unity] Android에서만 www.error == "Unknown Error" 가 발생하는 문제안영기http://smgal.ismine.net/tc_191/blog1/512019-05-12T12:15:56+09:002019-05-12T12:12:44+09:00비교적 최근부터, 개인적으로 만든 API server를 돌리면서 자체 app이나 자체 웹 페이지에서 그 기능을 이용하도록 하는 개인 프로젝트를 하고 있었다.<br /><br />API server를 이용하는 app 중에는 Unity로 만든 것도 2개가 있었는데, 며칠 전에 그 중 하나의 GUI를 업데이트 하는 작업을 하였다. Unity의 테스트는 Windows에서 하기 때문에 개발 시의 테스트는 아무런 문제가 없이 잘 진행되었다. 그리고 최종 타겟 디바이스는 Android이기 때문에 마지막으로 디바이스에서 테스트만 하면 업데이트 테스트는 끝나는 상황이었다.<br /><br />그런데, 그 중에 일부 기능이 타겟 동작을 하지 않았다.<br /><br /><상황><br />1. Windows에서는 잘 되던 app이 Android 디바이스에서는 제대로 동작하지 않았다.<br />2. 문제의 부분은 API server를 이용하는 부분이었다.<br />3. Server 쪽의 로그를 보면 app으로부터 아예 요청이 가지 않았다.<br />4. Unity 쪽에서 원인을 좁혀가니 www.error 가 "Unknown Error"가 발생하는 문제였다.<br />5. 네트워크와 관련된 부분은 이번에 code를 손댄 적이 없다.<br />6. 같은 API 서비스를 이용하는 또 다른 app은 문제없이 구동되고 있다.<br /><br />흔한 오류 패턴은 아니었기 때문에 제일 먼저는 나의 실수인지를 체크했다.<br />잘 동작하고 있는 또 다른 app의 네트워크 부분과 diff 툴로 확인을 했지만 문제는 찾을 수가 없었다.<br /><br />따로 방법이 없다보니 adb의 로그를 봐야 했다.<br /><br />adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG<br /><br />그리고 유의미해 보이는 로그를 찾았다.<br /><br />
<div>05-12 10:19:12.331 19641 19670 E Unity : java.io.IOException: Cleartext HTTP traffic to api.******.net not permitted</div>
<div>05-12 10:19:12.344 19641 19657 I Unity : ERROR: Unknown Error</div>
<div> </div>
저 'Cleartext HTTP traffic'라는 것이 생소해서 검색을 했더니, '안드로이드 9.0 파이(API level 28)'부터는 TLS 기반의 통신이 아니면 이 에러를 낸다고 한다.<br /><br /><a href="https://android-developers.googleblog.com/2018/04/protecting-users-with-tls-by-default-in.html">https://android-developers.googleblog.com/2018/04/protecting-users-with-tls-by-default-in.html</a><br /><br />즉, HTTP를 HTTPS로 바꾸어야 한다는 것인데, 그렇다고 당장에 server를 HTTPS로 바꾸는 것은 무리이다. 그리고 애시당초 내 쪽에서는 code를 손 댄 적이 없는데 발생하는 것이라서 더 원인을 알아 내야만 했다.<br /><br />일단 1차적인 원인을 제거하기 위해서 Unity - Project Setting - Player 쪽으로 가서 Android의 빌드 버전을 바꾸기로 했는데 거기서 문제의 원인을 찾았다.<br />Android의 SDK가 다른 PC와의 작업을 위해서 Target API Level을 Automatic(highest installed) 로 했는데 그것이 문제였다.<br /><br />최근에, Unity의 개발과는 별도로 또 다른 Android project를 위해 Android Studio를 업그레이드 하고 SDK도 가장 최신인 Pie를 추가로 설치했는데 이것이 문제의 발단이다.<br />원래는 제일 높은 버전이 27이었지만, 이 작업으로 인해 제일 높은 버전이 28로 바뀌게 되었고, Unity의 app을 Android용으로 재빌드를 하는 순간 API level 28이 적용되어 버린 것이었다.<br />
<div> </div>
<div class="imageblock center" style="text-align: center; clear: both;"><img src="http://smgal.ismine.net/tc_191/attach/1/1394883733.png" alt="사용자 삽입 이미지" height="223" width="324" /></div>결국 가장 빠른 문제 해결인 다음의 방법으로 해결하였다.<br />
<div style="text-align: left;"> </div>
<div class="imageblock center" style="text-align: center; clear: both;"><img src="http://smgal.ismine.net/tc_191/attach/1/1325131621.png" alt="사용자 삽입 이미지" height="296" width="470" /></div><p><strong><a href="http://smgal.ismine.net/tc_191/blog1/51?commentInput=true#entry51WriteComment">댓글 쓰기</a></strong></p>