Android单元测试中Robolectric绕过企业认证代理问题的解决方法咨询
Android单元测试中Robolectric绕过企业认证代理问题的解决方法咨询
嗨,我之前也踩过一模一样的企业代理认证坑!Robolectric启动时拉取依赖的逻辑确实需要明确配置代理的用户名和密码才能绕过407认证失败的问题,给你几个亲测有效的解决方案:
方案一:在build.gradle中补充代理认证属性
你之前只配置了代理主机和端口,还需要添加用户名和密码的系统属性,把下面两行加到你的build.gradle里(和已有的代理配置放在一起):
systemProperty 'robolectric.dependency.proxy.user', project.findProperty("systemProp.https.proxyUser") systemProperty 'robolectric.dependency.proxy.password', project.findProperty("systemProp.https.proxyPassword")
记得先在项目根目录的gradle.properties里配置好对应的代理账号信息:
systemProp.https.proxyHost=你的企业代理地址 systemProp.https.proxyPort=代理端口 systemProp.https.proxyUser=你的代理认证用户名 systemProp.https.proxyPassword=你的代理认证密码
方案二:直接在gradle.properties配置Robolectric专属代理
嫌build.gradle里写代码麻烦的话,也可以直接在gradle.properties里添加Robolectric专用的代理配置,这样不需要修改build.gradle:
robolectric.dependency.proxy.host=你的企业代理地址 robolectric.dependency.proxy.port=代理端口 robolectric.dependency.proxy.user=你的代理认证用户名 robolectric.dependency.proxy.password=你的代理认证密码
方案三:配置测试运行的JVM全局代理
如果上面两种方法都没效果,大概率是Robolectric的依赖下载器直接走了JVM的全局代理设置,你可以在Android Studio的测试运行配置里添加VM参数:
打开Run/Debug Configurations → 找到你的测试配置 → 在VM options里填入:
-Dhttps.proxyHost=你的企业代理地址 -Dhttps.proxyPort=代理端口 -Dhttps.proxyUser=你的代理认证用户名 -Dhttps.proxyPassword=你的代理认证密码
小提示:敏感信息安全处理
如果不想把代理密码硬编码到配置文件里,可以用环境变量来传递:
比如在build.gradle里这样写:
systemProperty 'robolectric.dependency.proxy.user', System.getenv("PROXY_USER") systemProperty 'robolectric.dependency.proxy.password', System.getenv("PROXY_PASSWORD")
然后在系统环境变量里设置好PROXY_USER和PROXY_PASSWORD就可以了,避免密码泄露风险。
备注:内容来源于stack exchange,提问作者Aniokrait
相关产品推荐
相关产品推荐

