如何配置sdkmanager使其适配企业代理的认证与证书设置?
解决sdkmanager代理不生效及repositories.cfg加载失败问题
嘿,我来帮你搞定这两个头疼的问题!咱们一步步来:
1. 消除repositories.cfg加载失败的警告
这个警告其实没啥实际影响,但看着闹心对吧?直接手动创建这个空文件就能解决:
touch /home/users/n.gendron/.android/repositories.cfg
运行完这条命令,下次再用sdkmanager就不会弹出这个烦人的警告了。
2. 让sdkmanager乖乖遵循企业代理配置
企业代理带认证和签名证书的场景下,sdkmanager经常不读全局配置,得针对性处理:
方法一:直接给sdkmanager命令加代理参数(临时生效)
每次运行sdkmanager时,把代理信息作为参数直接传入,最直接有效:
sdkmanager --proxy=http --proxy_host=你的代理IP或域名 --proxy_port=代理端口 --proxy_user=你的企业账号 --proxy_pass=你的密码 "你要安装的SDK包名"
如果你的代理是HTTPS协议,把--proxy=http改成--proxy=https就行。
方法二:配置全局Gradle代理(让sdkmanager继承配置)
如果你平时用Android Studio或Gradle,可以把代理信息写到~/.gradle/gradle.properties里,sdkmanager通常会读取这个全局配置:
# HTTP代理配置 systemProp.http.proxyHost=你的代理地址 systemProp.http.proxyPort=代理端口 systemProp.http.proxyUser=你的企业用户名 systemProp.http.proxyPassword=你的企业密码 systemProp.http.nonProxyHosts=localhost|127.0.0.1|*.yourcompany.com # HTTPS代理配置 systemProp.https.proxyHost=你的代理地址 systemProp.https.proxyPort=代理端口 systemProp.https.proxyUser=你的企业用户名 systemProp.https.proxyPassword=你的企业密码 systemProp.https.nonProxyHosts=localhost|127.0.0.1|*.yourcompany.com
保存后重启终端再试sdkmanager,大概率能生效。
方法三:导入企业代理证书到Java信任存储
因为你的代理会给所有连接签名,sdkmanager(基于Java开发)可能不信任这个证书,所以得把企业根证书导入到SDK自带的Java信任库:
- 找到Android SDK里的cacerts路径,一般是:
如果你不知道$ANDROID_SDK_ROOT/cmdline-tools/latest/lib/jre/lib/security/cacerts$ANDROID_SDK_ROOT,可以用echo $ANDROID_SDK_ROOT查看,或者手动定位到你的SDK安装目录。 - 运行导入命令(默认cacerts密码是
changeit):
输入密码后按提示确认导入即可。keytool -importcert -file /path/to/你的企业根证书.crt -keystore /path/to/上面找到的cacerts文件 -alias "企业代理证书"
方法四:用环境变量强制代理
运行sdkmanager前先导出代理环境变量,适合临时测试场景:
export HTTP_PROXY=http://你的用户名:你的密码@代理地址:端口 export HTTPS_PROXY=http://你的用户名:你的密码@代理地址:端口 export NO_PROXY=localhost,127.0.0.1,*.yourcompany.com # 然后运行sdkmanager sdkmanager "要安装的包名"
注意:如果用户名或密码里有特殊字符(比如@、:),需要URL编码,比如@换成%40,:换成%3A。
内容的提问来源于stack exchange,提问作者Nato Boram




