android - 如何使用工具 :overrideLibrary with multiple libraries

标签 android android-studio android-gradle-plugin

我想创建一个兼容的 Android 项目,例如API 级别 4,但仍想使用 UiAutomator 对其进行测试,而 UiAutomator 在较新的设备上需要 API 级别 18。因此,该应用程序也可以在旧设备上运行,但自动测试将在新设备上执行。

因此我使用 Android Studio 创建了一个新项目并添加了 UiAutomator 测试库:

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  testCompile 'junit:junit:4.12'
  compile 'com.android.support:appcompat-v7:23.0.1'
  androidTestCompile 'com.android.support:support-annotations:23.0.1'
  androidTestCompile 'com.android.support.test:runner:0.3'
  androidTestCompile 'com.android.support.test:rules:0.3'
  androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}

编译时出现错误

Error:Execution failed for task ':app:processDebugAndroidTestManifest'.
> java.lang.RuntimeException: Manifest merger failed : uses-sdk:minSdkVersion 4 cannot be smaller than version 8 declared in library [com.android.support.test:runner:0.3] /Users/dom/Entwicklung/MacBookPro/git/GradleTest/app/build/intermediates/exploded-aar/com.android.support.test/runner/0.3/AndroidManifest.xml
    Suggestion: use tools:overrideLibrary="android.support.test" to force usage

添加

<uses-sdk tools:overrideLibrary="android.support.test"/>

AndroidManifest.xml 导致另一个错误发生:

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 4 cannot be smaller than version 7 declared in library [com.android.support:appcompat-v7:23.0.1] /Users/dom/Entwicklung/MacBookPro/git/GradleTest/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/AndroidManifest.xml
    Suggestion: use tools:overrideLibrary="android.support.v7.appcompat" to force usage

将其更改为

<uses-sdk tools:overrideLibrary="android.support.test, android.support.v7.appcompat"/>

再次导致第一个错误:

Error:Execution failed for task ':app:processDebugAndroidTestManifest'.
> java.lang.RuntimeException: Manifest merger failed : uses-sdk:minSdkVersion 4 cannot be smaller than version 8 declared in library [com.android.support.test:runner:0.3] /Users/dom/Entwicklung/MacBookPro/git/GradleTest/app/build/intermediates/exploded-aar/com.android.support.test/runner/0.3/AndroidManifest.xml
    Suggestion: use tools:overrideLibrary="android.support.test" to force usage

我使用的是最新的 Android Studio 和构建工具。 Android Studio 用于构建应用程序的 gradle 命令是

Gradle tasks [clean, :app:generateDebugSources, :app:generateDebugAndroidTestSources, :app:compileDebugSources, :app:compileDebugAndroidTestSources]

所以问题可以重现,例如与

gradle :app:generateDebugAndroidTestSources :app:compileDebugAndroidTestSources

在 tools:overrideLibrary 中指定多个库的正确语法是什么?我读过逗号和空格是正确的,但它似乎不起作用。我已经在 StackOverflow 和其他地方阅读了很多关于它的内容,但不幸的是,到目前为止我找不到解决方案(除了评论测试之外)。

最佳答案

我发现解决方案是创建一个第二个 AndroidManifest.xml,仅用于测试。它必须保存在 测试目录 中并且只需要包含 overrideLibrary 语句:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="${applicationId}">
    <uses-sdk tools:overrideLibrary="android.app, android.support.test, android.support.test.rule, android.support.test.espresso, android.support.test.espresso.idling, android.support.test.uiautomator.v18"/>
</manifest>

如果你为你的任务使用不同的目录,你可以在你的 gradle 文件中这样指定它:

androidTest.setRoot('src_test_uiautomator')

AndroidManifest.xml 文件必须位于该目录的根目录中,测试源位于“java”子目录中。

关于android - 如何使用工具 :overrideLibrary with multiple libraries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32905979/

相关文章:

android - 如何在 Android Studio 项目中包含库模块依赖项?

java - 将图像文件路径保存到sqlite数据库

android - 从 ReSTLet 响应中获取文件

android - 如何限制numberdecimal EditText中点之前和之后的数字

android - 在 Android Studio 中展开所有包树文件夹(项目 View )的键盘快捷键?

android-studio - Android Studio 升级到 0.8.5 导致 Gradle 错误

android - 如何在 okhttp3 身份验证器中使用异步请求添加带有刷新 token 的身份验证

Android Studio TFS(团队基础服务器)

java - 如何使用(导入)com.aldebaran.qi.helper.proxies.*;在 android studio 上,以便它可以在我的手机上运行?

Android Studio 2.1.1 运行旧的 .apk 文件