如何使android:usesCleartextTraffic =“ true”仅用于工具测试?

时间:2018-12-16 16:59:23

标签: android android-espresso android-instrumentation mockwebserver

我正在使用RESTMock进行仪器测试,但只有在清单中将usesCleartextTraffic设置为true时,此方法才有效。不过,我只希望对仪器测试如此。有办法吗?

我尝试在androidTest文件夹中创建一个新的清单文件。测试可以运行,但是它们失败,就像usesCleartextTraffic仍然是false

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.package">

    <application android:usesCleartextTraffic="true" />

</manifest>

我知道RESTMock从版本0.3.2开始支持https,但是我宁愿不必处理它。我实际上遵循了他们的指南,并最终遇到OkHttp3的错误:

java.lang.AssertionError: java.security.NoSuchAlgorithmException: The BC provider no longer provides an implementation for KeyPairGenerator.RSA. Please see https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html for more details.

有什么想法吗?


编辑:

我遵循了this的回答,并将我创建的此清单移动到了debug源文件夹中,然后它起作用了。现在android:usesCleartextTraffic="true"选项仅适用于我的调试版本,由工具测试使用,因此可以正常工作,但仍然感觉不合适。

1 个答案:

答案 0 :(得分:1)

对我来说,解决方案是在AndroidManifest.xml中添加一个简单的androidTest/AndroidManifest.xml。您所参考的答案中也提到了这一点,但是在那种情况下,它不起作用,因为旧工具没有合并此AndroidManifest.xml

因此,在androidTest目录中,并且在java目录旁边,我有以下内容:

~/source/my-library/src/androidTest develop*
❯ ls
AndroidManifest.xml java

使用此AndroidManifest.xml文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.mypackage.mylibrary">

    <application
        android:usesCleartextTraffic="true" />

</manifest>