“机器人分子说”;“未找到AndroidManifest.xml”;

“机器人分子说”;“未找到AndroidManifest.xml”;,android,android-studio,android-gradle-plugin,robolectric,Android,Android Studio,Android Gradle Plugin,Robolectric,当我试图让Robolectric RC3在Android Studio中工作时,我得到了 Caused by: java.lang.RuntimeException: build/intermediates/bundles/debug/AndroidManifest.xml not found or not a file; it should point to your project's AndroidManifest.xml at org.robolectric.manifest.Andro

当我试图让Robolectric RC3在Android Studio中工作时,我得到了

Caused by: java.lang.RuntimeException: build/intermediates/bundles/debug/AndroidManifest.xml not found or not a file; it should point to your project's AndroidManifest.xml
at org.robolectric.manifest.AndroidManifest.validate(AndroidManifest.java:120)
at org.robolectric.manifest.AndroidManifest.getResourcePath(AndroidManifest.java:469)
at org.robolectric.manifest.AndroidManifest.getIncludedResourcePaths(AndroidManifest.java:475)
at org.robolectric.RobolectricTestRunner.createAppResourceLoader(RobolectricTestRunner.java:479)
at org.robolectric.RobolectricTestRunner.getAppResourceLoader(RobolectricTestRunner.java:471)
at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:73)
at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.java:421)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:234)
我试过了

@Config(manifest = "app/src/main/AndroidManifest.xml", constants = BuildConfig.class, sdk=21)
我尝试在我的TestRunner中设置清单位置,但没有任何效果。在文件系统中,我看到清单在

./app/build/intermediates/manifests/full/debug/AndroidManifest.xml
不在Robolectric正在寻找的位置。 有一次清单被忽略了,然后资源出现了类似的问题,应用程序或Robolectric无法找到我的应用程序使用的原始资源。 这在我的生成文件中:

   sourceSets {
    main {
        java.srcDirs = ['src/main/java']
        resources.srcDirs = ['src/main/res']
    }
    test {
        java.srcDirs = ['src/test/java', 'src/main/java']
        resources.srcDirs = ['src/test/res', 'src/main/res']
    }
}
我如何告诉Robolectric在哪里寻找清单,更重要的是,在哪里寻找资源

编辑:
我已经从github签出Robolectric,我已经构建了它,安装在我的本地.m2 repo中,gradle文件现在引用本地快照构建,我确保gradle不会从远程repo获得新版本。然后我将RobolectricGradleTestRunner复制到我的项目中,我更改了定义文件位置的行:它不包含模块名称。现在它起作用了

您可以在此处参考相同的问题:

您应该在测试代码中提到这一点:

@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18)
这会告诉机器人你的清单文件在哪里。除非您更改目录值,否则这应该是有效的

还可以尝试使用internet上提供的模板。所有内容都在其中设置。您无需更改目录值。您可以从这里获得:


编辑:我看到的是异常发生在“
build/intermediates/bundles/debug/AndroidManifest.xml”
,但你说的是文件在
“app/build/intermediates/manifests/full/debug/AndroidManifest.xml”
,我猜这两个位置不同。请确保您的xml文件位于
build/intermediates/bundles/debug/AndroidManifest.xml“

我假设您正在尝试使用JUnit运行测试。您可以尝试两种不同的方法:

  • 创建一个自定义TestRunner类,如图所示。检查CustomTestRunner部分,在该部分中,您基本上创建了一个实际知道要使用的正确清单的TestRunner。使用
    @Config
    注释指定要与测试runner一起运行的测试
  • (我的首选)转到JUnit配置,运行>编辑配置。注意“工作目录”文本框。将
    /app
    (适用于OSX和Linux)或
    \app
    (Windows)附加到文本框中写入的路径。再次尝试运行,它应该可以工作

  • 这是正确的@Christine。我也面临着确切的问题。问题是构建过程根本没有在“中间产品”下创建bundles文件夹。自定义robolectric runner也不起作用。这是自定义的 我还没有找到解决方案,但问题似乎与需要使用的构建工具版本有关


    [更新]更改我的单元测试运行配置中的工作目录,以指向正在测试的模块根目录,该目录对我有效。[更新]

    在Android Studio上也存在同样的问题。我已经解决了这个问题,可以编辑单元4的配置。您可以按照这些操作

    在Android Studio上

  • 编辑配置
  • 在Junit中,必须将工作目录更改为$MODULE\u DIR$
  • 重要的是$MODULE\u DIR$

    您可以参考以下截图。谢谢


    我也遇到过同样的错误,我们使用了几种风格和构建类型 因此,有一些步骤可以让它工作:

  • Android studio测试运行配置
  • 在Windows中也必须将工作目录设置为$MODULE_DIR$。应该这样说

  • 单元测试的注释如下:

    @RunWith(RobolectrictTestRunner.class) @配置(常量=BuildConfig.class,sdk=21,manifest=“src/main/AndroidManifest.xml”,packageName=“com.example.yourproject”) 公共类片段测试{


  • 请注意,intellij 16 EAP在$MODULE_DIR$变量周围有一个bug(它指向了错误的位置),导致测试因此异常而失败。请参阅。应在2016年1月中旬修复。

    我在将AndroidStudio更新为2.3.3并且我的gradle插件也更新后出现此错误。 通过将
    工作目录
    设置为
    $MODULE\u DIR$
    ,并将
    roblectric
    依赖项从
    testCompile'org.roblectric:roblectric:3.0'
    更新为
    testCompile'org.roblectric:roblectric:3.4.2'


    请注意,设置
    工作目录
    ,而
    robolectric
    版本为旧版本将无法解决此问题。

    如果Android Studio 3.0仍存在此错误,请确保您的gradle配置具有以下参数:

    android {
        ...
        testOptions {
            unitTests {
                includeAndroidResources = true
            }
        }
    }
    

    请找到以下解决所有问题的步骤。 步骤1:在依赖项中使用版本

    testImplementation"org.robolectric:robolectric:4.0" in app.gradle    
    
    第2步:在下面的android内部使用app.gradle

    testOptions {    
        unitTests {    
            includeAndroidResources = true      
        }    
    }    
    
    步骤3:在gradle.properties中粘贴以下内容

    enableUnitTestBinaryResources=true
    

    它工作!!!

    我做了。没有工作。另外,在Robolectric RC3中,它是“sdk=18”,而不是“emulateSdk=18”。我没有将xml文件放在构建目录中。构建过程就是这样做的。这是帖子的新版本建议是,添加了“应用程序”"字符串是必不可少的。谢谢你的大牌Chaparro!一个更好的解决方案是按照Robolectric入门页面上的建议将工作目录设置为$MODULE_DIR$,如果使用CI该怎么办?这是正确的答案。这是一个影响Mac用户的问题。这实际上在Robolectric入门页面上有记录ed page,。我是Robolectric的新手;刚刚设置了项目,可能做了一些错误。尽管如此,这个答案解决了我在Windows上的问题。但是为什么每次新测试都需要它?它是否以任何方式表示“工作目录”对于所有的测试?我不知道为什么根据其他的评论它应该工作,但我不能让它作为3.5工作。还有其他人面临同样的问题吗?确保你导入了正确的BuildConfig-我没有注意到和拉