-
프록시로 인한 gradle 빌드 에러 해결 (Unity / Android Studio)Knowledge 2020. 7. 23. 20:44
회사 등 프록시로 막힌 환경에서 개발툴을 셋업은 여러가지로 어렵다.
요즘 안드로이드 빌드를 gradle로 하는 경우가 대부분인데, 인증서를 교체하는 프록시 서버 환경에서는 반드시 에러가 난다. 다음과 같은 에러가 하나의 예이다.
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
물론 다른 네트워크 상황이나 설정으로 인한 에러일 수 있지만 프록시 환경이라면 원인은 대부분 프록시 서버가 설정이 안되었거나 아니면 프록시 서버가 바꾼 인증서를 Java가 신뢰하지 못해서이다.
해결 방법은 gradle이 프록시 서버를 통해 빌드하도록 설정하고, Java의 신뢰할 수 있는 인증서 목록에 프록시 서버의 인증서를 추가하는 것이다.
Gradle 프록시 설정
그래들의 프록시 설정은 gradle.properties 파일에서 할 수 있다.
윈도우즈 10 기준으로 이 파일의 위치는 다음과 같다.C:\Users\USER_NAME\.gradle\gradle.properties
USER_NAME은 윈도우즈의 사용자 이름이다.
만약 이 파일이 존재하지 않는다면 그냥 메모장 등으로 하나 만들면 된다.프록시 설정을 위해서 다음 내용을 gradle.properties에 추가한다.
## For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # ... #Wed Jul 08 18:18:37 KST 2020 systemProp.http.proxyHost=192.168.100.120 systemProp.http.proxyPort=9999 systemProp.https.proxyHost=192.168.100.130 systemProp.https.proxyPort=8888
http와 https 연결을 지정한 프록시를 통하도록 하는 내용이다.
예제에서 http는 192.168.100.120의 9999포트를 프록시로 쓰고 있고, https는 192.168.100.130의 8888포트를 사용하고 있다. 때로는 http와 https 모두 같은 IP와 포트를 쓰기도 하니, 정확한 프록시 값은 네트워크 관리자를 통해 알아보고 적용해야 한다.
Java 인증서 추가
먼저 필요한 것은 프록시 서버에서 https에 사용하는 인증서 파일이다. 이 파일을 jdk나 jre가 관리하는 인증서 데이터에 추가해주면 된다.
jdk나 jre가 설치된 디렉토리를 JAVA_HOME이라고 하면, 인증서 파일의 데이터는 JAVA_HOME\lib\security\cacerts에 있다.이 파일을 수정하기 위해서는 JAVA_HOME\bin\keytool.exe 파일을 사용한다.
다음은 company.crt 파일을 cacerts에 company_proxy라는 명칭으로 추가하는 예제이다.
C:\> cd JAVA_HOME\jre\jre\lib\security C:\...\security> ..\..\bin\keytool.exe -keystore cacerts -importcert -alias company_proxy -file company.crt
keytool을 실행하면 cacerts의 패스워드를 묻는데, 바꾼적이 없다면 "changeit"이다.
패스워드를 입력하면 이제 인증서가 추가되어 정상적인 사용이 가능하다.추가된 내용을 확인해보고 싶으면 다음 커맨드로 cacerts 파일을 살펴볼 수 있다.
C:\...\security> ..\..\bin\keytool.exe -list -keystore cacerts
결과를 내려보면 company_proxy라는 이름으로 인증서가 추가된 것을 확인할 수 있다.
이제 설정이 끝났으므로 안드로이드 스튜디오나 Unity를 재시작하면 정상적으로 빌드가 가능해진다.
JAVA_HOME
어떤 버전의 Java를 쓰는지가 개발환경에 따라 조금씩 다르고 그래서 JAVA_HOME의 위치도 상이하디.
32비트, 64비트, 오라클 버전, 오픈 버전, 등등 설치된 JDK나 JRE가 많다면 엉뚱한 파일을 고치게 될 수도 있으니 유의해야 한다.안드로이드 스튜디오로 개발을 하는 경우 SDK에 내장된 OpenJDK의 jre를 쓰는 경우와 기존에 설치되어 있는 Oracle이나 다른 jre를 쓰는 경우가 각각 존재한다.
안드로이드 SDK에 내장된 jre의 위치는 버전에 따라 조금 다르지만, 2020년 7월 기준으로 다음 위치이다.C:\Program Files\Android\Android Studio\jre
회사의 다른 분들이 문의하셔서 살펴보니 3년이 지난 2023년 7월 기준으로 jre 위치가 변경되었다. 이게 뭐라고 바꿔야했는지 모르겠지만 이 글을 참조하실 다른 분들을 위해 바뀐 위치를 남겨본다.
C:\Program Files\Android\Android Studio\jbr
유니티로 개발을 하는 경우 유니티에 내장된 안드로이드 빌드 툴을 쓰는 경우와 기존에 설치된 안드로이드 빌드 툴을 쓰는 경우로 갈라진다. 현재 사용중인 JDK의 위치는 Edit->Preferences->Exrerernal Tools 메뉴에서 확인이 가능하다. (안드로이드 개발 모듈이 포함된 상태여야만 나온다.)
참고로 2019.3.2f1 기준으로 다음 위치이다.C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK\jre
그런데 예전 버전을 보니 다음 위치에 있는 경우도 있었다.
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\OpenJDK\Windows\jre
Fin.
반응형'Knowledge' 카테고리의 다른 글
윈도우10 업데이트 후 삼바 전체 공유 폴더 연결 실패 (0) 2021.05.20 Node.js에서 MySQL 연동 실패 해결 (MySQL 8) (4) 2021.01.14 Virtualbox 우분투 게스트에서 윈도우 호스트로 삼바(Samba) 공유 (0) 2020.04.28 [Mac OS] MongoDB 설치하기 (0) 2020.03.03