“机器人分子说”;“未找到AndroidManifest.xml”;
当我试图让Robolectric RC3在Android Studio中工作时,我得到了“机器人分子说”;“未找到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
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运行测试。您可以尝试两种不同的方法:
@Config
注释指定要与测试runner一起运行的测试/app
(适用于OSX和Linux)或\app
(Windows)附加到文本框中写入的路径。再次尝试运行,它应该可以工作这是正确的@Christine。我也面临着确切的问题。问题是构建过程根本没有在“中间产品”下创建bundles文件夹。自定义robolectric runner也不起作用。这是自定义的 我还没有找到解决方案,但问题似乎与需要使用的构建工具版本有关
[更新]更改我的单元测试运行配置中的工作目录,以指向正在测试的模块根目录,该目录对我有效。[更新]在Android Studio上也存在同样的问题。我已经解决了这个问题,可以编辑单元4的配置。您可以按照这些操作 在Android Studio上
我也遇到过同样的错误,我们使用了几种风格和构建类型 因此,有一些步骤可以让它工作:
请注意,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-我没有注意到和拉