На днях мне пришлось разворачивать Android Studio IDE на машине с корпоративным прокси. Тема не нова, и уже обсуждалась на stackoverflow и в блогах. Однако, эта задача не решается сходу — приходиться покопаться. Поэтому я решил создать пошаговую инструкцию по настройке IDE Android-разработчика в условиях прокси.
Все действия мы будем проводить на windows-машине. Для linux алгоритм будет аналогичный.
Итак, при первом запуске Android Studio предлагает настроить прокси
Жмем Setup Proxy, вводим адрес прокси-сервера и свои учетные данные:
Адрес прокси можно узнать с помощью команды (windows)
ipconfig /all | find /i "Dns Suffix"
Протестируйте соединение с помощью кнопки Check connection на этом же окне. Если все ок, идем дальше.
Все ок, идем дальше. В появившемся после запуска IDE окне прокси нужно снова прописать параметры proxy для http и https:
Эти же настройки можно прописать в файле gradle.properties:
systemProp.http.proxyPassword=<PASSWORD> systemProp.http.proxyHost=<PROXY_URL> systemProp.http.proxyUser=<LOGIN> systemProp.http.proxyPort=<PORT> systemProp.https.proxyPassword=<PASSWORD> systemProp.https.proxyHost=<PROXY_URL> systemProp.https.proxyUser=<LOGIN> systemProp.https.proxyPort=<PORT>
Однако, имейте ввиду, что настройки прокси IDE перезаписывают настройки проекта.
Если сейчас попытаться собрать проект, то, скорее всего, сборка закончится неуспешно с ошибкой
SSLHandshakeException: sun.security.validator.ValidatorException: PKIX fix
Gradle пытается достучаться до серверов репозиториев, не имея сертификатов. Нам необходимо добавить их в хранилища. Для этого сначала добавляем в gradle.properties следующие строчки:
systemProp.javax.net.ssl.trustStore=<ANDROID STUDIO PATH>\\jre\\lib\\security\\cacerts systemProp.javax.net.ssl.trustStorePassword=changeit
Здесь мы указываем путь и пароль к хранилищу сертификатов. Пароль по умолчанию — changeit. Если вы не меняли его, он остался таким же.
Как же добавить сертификаты в хранилище?
Установка сертификатов
При запуске проекте IDE предлагает принять сертификаты. Их следует принять, однако это не поможет автоматически. Нам необходимо импортировать сертификаты в хранилище сертификатов cacerts IDE и JVM. Для этого необходимо выполнить следующие шаги:
- Скачать сертификат. Сделать это можно с помощью браузера или openssl
- Импортировать сертификат в в хранилища с помощью keytool
Чтобы импортировать загруженный на шаге 1 сертификат, на Windows-машине необходимо запустить командную строку от администратора и выполнить:
keytool -import -alias <alias> -keystore C:\Progra~1\Android\Android Studio3.0\jre\jre\lib\security\cacerts -file <path_to/certificate_file>
Также, необходимо добавить этот сертификат в другие хранилища cacerts (JVM и Android Studio):
keytool -import -alias <alias> -keystore <path_to_studio>\.AndroidStudio3.0\system\tasks\cacerts -file <path_to/certificate_file> keytool -import -alias <alias> -keystore "C:\Progra~1\Java\jre_V.V.V\lib\security\cacerts" <path_to/certificate_file>
альтернативно, вместо того, чтобы добавлять, можно копировать сертификаты между хранилищами с помощью команды:
keytool -importkeystore -srckeystore <path_to_studio>\.AndroidStudio3.0\system\tasks\cacerts -destkeystore C:\Progra~1\Java\jre_V.V.V\lib\security\cacerts -v password changeit
После импорта сертификатов почистите кэш gradle в папке C:\Users\<User>\.gradle и перезагрузите систему. Если при попытке обратиться к хранилищу cacerts IDE выдает ошибку Access denied, запустите Android Studio от администратора.
Запускаем сборку… Проект успешно собирается!
В случае, если импорт сертификатов не помогает, можно заменить адрес загрузки репозиториев с секьюрного https на обычный http:
jcenter { url "http://jcenter.bintray.com/" }
Git
Помимо gradle, проблемы могут возникнуть и с системой контроля версий. В случае с git необходимо необходимо добавить в глобальные настройки git параметры proxy. Для этого выполнить команду:
git config --global http.proxy http[s]://userName:password@proxyaddress:port
Если при попытке при попытке pull/push из/в GitLab возникает ошибка
SSL certificate problem: self signed certificate in certificate chain
то следует выполнить следующую команду от администратора:
git config --system http.sslCAPath <path_to_studio>/.AndroidStudio<v.No>/system/tasks/cacerts
Для возможности push/pull через IDE Android Studio необходимо в настройках Settings->Version Control->Git в пункте SSH executable указать Native
На этом все, можно работать. Надеюсь, статья оказалась полезной для вас. Буду рад вашим мнениям и комментариям!