【问题标题】:androidTest AndroidManifest.xml ignoredandroidTest AndroidManifest.xml 被忽略
【发布时间】:2026-01-16 12:50:01
【问题描述】:

我在这篇文章中提到了同样的问题AndroidTest Manifest permission not detected

还有这个帖子AndroidManifest in androidTest directory being ignored

--> 如果我将测试清单放在androidTestdebugAndroidTestandroidTestDebug 中,它永远不会被拾取和合并。

关于将AndroidManifest.xml 放入debug 文件夹的答案是正确的;这似乎确实有效。 (将测试清单放在src/debug

我想知道的是为什么不能放在androidTest目录下?我在试图弄清楚这一点时阅读的所有文档都表明你应该能够做到,如果你不能,那么我认为这听起来像是清单合并中的一些错误。

不管怎样,我正在使用 Android Studio

【问题讨论】:

  • 你的 build.gradle 是什么样的?那里有任何sourceSets 的东西吗?

标签: android android-manifest android-testing


【解决方案1】:

这是正确的,并且完全同意您对令人困惑的文档的看法。 androidTest* 源集下的 AndroidManifest.xml 将被打包用于在您的实际应用 APK 上进行测试的检测 APK。如果您在使用命令gradlew assembleDebugAndroidTest 编译您的应用模块后,在build/outputs/apk/ 下打开生成的debugandroidTest 的APK(假设您没有更改build.gradle 中的testBuildType,更多信息@ 987654321@),您会发现在androidTest 下添加的任何AndroidManifest.xml 配置都将在androidTest APK 中,而不是在您的debug 应用APK 中。

正如您所说,如果您需要测试特定配置(例如额外权限),您必须将它们放在 AndroidManifest.xml 下的 debug 源集而不是 main 中,因此它们只会可用于测试您的应用程序,但不能在您的发布版本中。当然,您始终可以在编译后打开生成的 APK 进行仔细检查,以确保每个构建变体的配置都正确。

【讨论】:

  • @josh 这个答案对你有帮助吗?
【解决方案2】:

如果您需要为测试添加额外的权限,您可以这样做。

您应该在默认AndroidManifest.xmlandroidTest/AndroidManifest.xml 中设置相同的android:sharedUserId

例如:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:sharedUserId="com.yourpackagename.uid">

    <application
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:allowBackup">

    </application>

</manifest>

androidTest/AndroidManifest.xml:

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

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

</manifest>

详情:https://*.com/a/14196493/3901000

【讨论】:

  • 出于安全原因,这不是可行的方法。您最终会在发布产品中设置 sharedUserId 标志。
  • @Juke sharedUserId 只能为 debug/AndroidManifest.xml 中的调试构建设置
  • 您从何处获得此信息?该文档没有提到该标志仅限于调试版本。事实上,它明确提到应用程序的证书必须相同。该机制应防止访问,例如一个被劫持的应用程序。虽然我建议仅在真正需要时才使用 sharedUserId。
  • @Juke 只为调试版本设置这个标志,你应该把它放在 debug/AndroidManifest.xml 中,正如我之前提到的。然后它不会被运送到生产中。例如,如果您只想在安装检测 apk 时添加权限,则此标志对于 ui 测试权限很有用。