测试权限和Android应用程序的清单文件

5
我想知道是否有一种方法可以在Android清单文件中添加特定的权限(或任何内容),但仅在测试运行时使用,而不是生产环境。我正在寻找程序化的解决方案,而不是在测试时进行剪切和粘贴。
这里是上下文: 我正在阅读这篇文章:http://developer.android.com/training/location/location-testing.html,测试运行应用的最佳实践曾经是创建一个“测试应用程序”,然而现在我们不需要创建新的应用程序-所有测试都应该通过应用程序完成。(感谢gradle)。 问题在于,这篇文章写了一个测试权限(ACCESS_MOCK_LOCATION),而我不希望它出现在我的应用程序中-如果有好的方法,我想这么做。
更新:我遇到这个问题的原因是因为对Android Studio架构的设置误解,自从迁移到Gradle后。我没有意识到构建类型共享“androidTest”和“main”源文件夹。所以在测试或运行未完成的应用程序时,它会把调试文件(如果有的话)添加到所有产品文件中。因此,在我的情况下,我在调试中添加了一个空的清单文件,并简单地将两个权限添加到其中。当我运行或测试时,gradle会将所有应用程序的其他清单中的内容添加到这个基本文件中(反之亦然,我不确定)。最终我们不需要修改androidTest文件夹(实际上我认为我们不允许在此处添加清单),因为它完全是根据用户是否在debug或deployment上运行而生成的。

1
我对此并不是很了解,但一个好的线索可能是通过Android Studio提供的名为“Flavors”的东西。这里是链接 - Andrew Schuster
我看了一下,问题在于我发现测试清单是自动生成的,所以现在我正在尝试找到一种方法只为测试添加权限(通过gradle),但我认为可能只能通过调试来实现。我会保持更新。 - Jono
2个回答

17

假设你使用默认的debugrelease构建类型,并对debug构建类型运行测试。在这种情况下,您可以创建一个src/debug/AndroidManifest.xml文件,并在其中添加您需要在调试构建中使用的额外权限:

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

    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

</manifest>

完美,我刚刚弄清楚了。 :) 我很感激。 - Jono
是的,那个有效。所以现在我有两个清单文件:一个在src/main/AndroidManifest.xml,另一个在src/debug/AndroidManifest.xml。 - netimen

6
如果您的项目没有遵循默认文件夹层次结构,并且您想要在调试版本中添加权限,请添加以下代码块。
sourceSets {
    debug {
        manifest.srcFile '<your folder>/AndroidManifest.xml'
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接