2016-03-04 9 views
6

Eski bir Android uygulamasını Android Studio/Gradle uygulamasına geçirdim. Test, minSdkVersion=18 gerektiren uiautomator-v18'a ihtiyaç duyar. Ancak, minSdkVersion 15 veya 16'ya ayarlanmış olmak istiyorum.Android: Kitaplıkta (uiautomator-v18) bildirilenden daha düşük olan minSdkVersion nasıl kullanılır?

Aynı şey üzerinde SO ile ilgili birçok soru var, ancak bu sorunu çözemiyorum.

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' 
    ) 
} 

yukarıdaki hata veriyor:

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 

Ama zaten overrideLibrary kullanıyorum.

Bu mümkün değilse, "ana" ve "androidTest" için farklı minSdkVersion olması mümkün mü?

DÜZENLEME: tatlar ekledikten sonra, ben varyantı tstDebug inşa kullanarak test yapmak başardı. Ancak, prdDebug ile inşa etmek androidTest'te bilinmeyen şeyler olduğunu söyleyen bir hatayla sonuçlanır (örnek: package org.hamcrest does not exist). build.gradle değiştirilmiş alıntı:

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" 

buna androidTest olmadan uygulama oluşturmak gerektiğini "Android Studio" anlatmak mümkün değil mi?

android { 
    productFlavors { 
     production { 
      minSdkVersion 15 
     } 
     uiTest { 
      minSdkVersion 18 
     } 
    } 
... 
} 

Sonra uiTest lezzet oluşturur üzerinde testler:

+0

Eğer overrideLibrary arasında AndroidManifest sürümü değiştirmeye çalıştı mı? – Sree

+0

@Sree: Evet, aynı sorun. – tokosh

+0

Sonunda "tatlar" ile çalışabilirim: Tatlandırılmış testleri doğru şekilde isimlendiremedim. Yani, lezzet "dev" için test klasörü 'androidTestDev' olmalıdır. Ben bu [cevap] bulundu (http://stackoverflow.com/a/28092437/3045181) – tokosh

cevap

5

Bir seçenek testler için bir ürün lezzet sahip olmaktır.

+0

geç denemek için üzgünüm. Sonunda daha düşük bir "minSdkVersion" ile çalışan testlere sahibim. Özlediklerim, "Android Studio" da yapı-varyantı kuruyordu. Bu olmadan test çalıştırılamadı. Eğer bu 'overrideLibrary' ile mümkün olsaydı (bana göründüğü gibi bu amaç) tercih etti. Ama iyi, yeterli zaman harcadı. – tokosh

+0

yerine ürün lezzet, sadece bu gibi defaultConfig ile minSdkVersion'ın sarın, bir buildType içinde minSdkVersion'ın artırmak gerekiyorsa: cevap için 'espresso { defaultConfig { minSdkVersion'ın 18 }}' –

8

<uses-sdk tools:overrideLibrary ...>'u src/main/AndroidManifest.xml içine koydunuz mu?

Eğer öyleyse, src/main/AndroidManifest.xml çıkarın ve src/androidTest/AndroidManifest.xml aşağıdaki xml koymak deneyin.

(android:minSdkVersion="18" unutmayın)

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

    <uses-sdk 
     android:minSdkVersion="18" 
     tools:overrideLibrary="android.support.test.uiautomator.v18" 
     /> 
</manifest> 
+0

teşekkürler.Src/androidTest/içerisindeki AndroidManifest.xml işlevi otomatik olarak oluşturulur. Gradle.build içinde "minSdkVersion" kullanırsam, gradil.build'den/build ile bir "AndroidManifest.xml" oluşturur. 'MinSdkVersion' undefined 'i terk edersem, varsayılan olarak' 1' sürümünü kullanır, bu da bir hatayla sonuçlanır. – tokosh

+0

@tokosh Daha doğrusu, 'build.gradle 've' src/androidTest/AndroidManifest.xml' içinde 'minSdkVersion'' 'build/intermediates/manifest/androidTest/debug/AndroidManifest.xml' şeklinde birleştirildi. Yani, 'src/androidTest/AndroidManifest.xml' depolama önemlidir. aşağıdaki ortamda teyit: - Android Studio 1.5.1 - Android Gradle Plugin 1.5.0 - 'minSdkVersion'' in app/build.gradle': önceki açıklamaya ek olarak 16 – sumio

+0

, AndroidManifest.xml birleştirildi hala android var: minSdkVersion = "16" '. Sorun değil. "Araçlar: overrideLibrary" bildirmek, bildirimde birleşmenin birleşme başarısız olmasını engeller. – sumio

İlgili konular