古いAndroidアプリをAndroid-Studio/Gradleに移行しました。テストにはuiautomator-v18
が必要です。これにはminSdkVersion=18
が必要です。しかし、私はminSdkVersion
を15または16に設定したいと思っています。Android:ライブラリ(uiautomator-v18)で宣言されたものよりも低いminSdkVersionを使用する方法
同じことについて多くの質問がありますが、私はこの問題を解決できません。
抜粋のAndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.searcher"
android:versionCode="1"
android:versionName="0.0.1" >
<uses-sdk
tools:overrideLibrary="android.support.test.uiautomator.v18"/>
<!-- ... -->
</manifest>
build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.searcher"
minSdkVersion 15
targetSdkVersion 23
testApplicationId "com.example.searcher.test"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
dependencies {
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.google.android.gms:play-services-analytics:8.4.0'
compile files('libs/dagger-1.2.1.jar')
compile files('libs/dagger-compiler-1.2.1.jar')
compile files('libs/javawriter-2.1.2.jar')
compile files('libs/javax.inject.jar')
androidTestCompile(
'com.android.support:support-annotations:23.2.0',
'com.android.support.test:runner:0.4.1',
'com.android.support.test:rules:0.4.1',
'com.android.support.test.uiautomator:uiautomator-v18:2.1.1',
'org.hamcrest:hamcrest-library:1.3',
'org.mockito:mockito-core:1.10.5',
'junit:junit:4.12',
'com.google.dexmaker:dexmaker:1.1',
'com.google.dexmaker:dexmaker-mockito:1.1'
)
}
上記のエラーを与える:
Error:Execution failed for task ':app:processDebugAndroidTestManifest'.
> java.lang.RuntimeException: Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 18 declared in library [com.android.support.test.uiautomator:uiautomator-v18:2.1.1] /mypath/app/build/intermediates/exploded-aar/com.android.support.test.uiautomator/uiautomator-v18/2.1.1/AndroidManifest.xml
Suggestion: use tools:overrideLibrary="android.support.test.uiautomator.v18" to force usage
しかし、私はすでにoverrideLibrary
を使用しています。
これが可能でない場合、「main」と「androidTest」に異なるminSdkVersion
を持つことは可能ですか?
EDIT: 味を追加した後、私はバリアントtstDebug
を構築使用してテストを実行することができました。しかし、prdDebug
でそれを構築すると、androidTest(例:package org.hamcrest does not exist
)に未知のものがあるというエラーが表示されます。 build.gradle
の修正抜粋:
defaultConfig {
applicationId "com.example.searcher"
targetSdkVersion 23
versionCode 6
versionName "0.5.0"
}
productFlavors {
prd {
minSdkVersion 15
}
tst {
minSdkVersion 18
testApplicationId "com.example.searcher.test"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
}
// And instead of "androidTestCompile" use "tstCompile"
はandroidTest
せずにアプリケーションを構築すべきであること「のAndroidメーカー」を教えすることはできませんか?
android {
productFlavors {
production {
minSdkVersion 15
}
uiTest {
minSdkVersion 18
}
}
...
}
そしてuiTest
味のビルドでテストを実行します。
あなたoverrideLibraryのAndroidManifestにバージョンを変更しようとしたのですか? – Sree
@Sree:はい、同じ問題です。 – tokosh
私は最終的に "フレーバー"で動かすことができました:私は風味のあるテストの名前を正しく指定しませんでした。だから、フレーバー "dev"の場合、テストフォルダは 'androidTestDev'でなければなりません。私はこの[答え]で見つけた(http://stackoverflow.com/a/28092437/3045181) – tokosh