Przeprowadziłem migrację starszej aplikacji na Androida do systemu Android-Studio/Gradle. Wymagany test to uiautomator-v18
, który wymaga minSdkVersion=18
. Jednak chciałbym, aby minSdkVersion
był ustawiony na 15 lub 16.Android: jak używać niższej wartości minSdkVersion niż zadeklarowano w bibliotece (uiautomator-v18)
Jest wiele pytań na temat SO w tej samej sprawie, ale nie jestem w stanie rozwiązać tego problemu.
Exerpt 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'
)
}
Powyższe daje błąd:
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
Ale jestem już przy użyciu overrideLibrary
.
Jeśli nie jest to możliwe, czy można mieć różne minSdkVersion
dla "głównego" i "androidTest"?
EDIT: Po dodaniu smaki, udało mi się uruchomić testy z wykorzystaniem budować wariant tstDebug
. Jednak zbudowanie go pod numerem prdDebug
kończy się błędem mówiącym, że w androidTestu są nieznane rzeczy (przykład: package org.hamcrest does not exist
). Zmodyfikowany fragment 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"
Czy nie można powiedzieć „Android Studio”, że powinien zbudować aplikację bez androidTest
?
Czy próbowałeś zmienić wersję w AndroidManifest swojej overrideLibrary? – Sree
@Sree: Tak, ten sam problem. – tokosh
W końcu udało mi się uruchomić go z "smakami": nie udało mi się poprawnie nazwać testów smakowych. Tak więc dla smaku "dev" folderem testowym powinien być "androidTestDev". Które znalazłem w tym [odpowiedź] (http://stackoverflow.com/a/28092437/3045181) – tokosh