2015-06-02 12 views
36

Testler için farklı bir minSdkVersion, uygulamanın kendisinden daha farklı bir ayar yapmak mümkün müdür? Soruyorum çünkü test için yeni Test Destek Kitaplığı ve UI Automator kullanmak istiyorum. Ancak, bu yalnızca API 18+ sürümünde kullanılabilir. Aynı zamanda, tamamen test edilmiş olmamakla birlikte, Android'in eski sürümlerini desteklemek istiyorum. Bunu yapmak için build.gradle dosyama eklemek için neye ihtiyacım var?TestAndroid için farklı minSdkVersion'ı ana uygulamaya göre ayarlayın

Netleştirmek gerekirse, Android Studio'yu ve "yeni" Gradle tabanlı proje yapısını kullanıyorum.

+0

Burada kabul edilebilir bir cevap olduğunu düşünüyorum. – theblang

+0

@mattblang Henüz bir cevabı kabul etmediğim için özür dilerim. Tüm uygulama için sadece 'minSdkVersion' değerini değiştirdim ve verilen cevapları henüz doğrulamadım. Yine de, cevaplarımı kendim test etme şansım olduğunda bir cevabı kabul etmedim. –

cevap

1

Evet, yapabilirsiniz. Test özel bildirim girişlerini src/androidTest/AndroidManifest.xml içine koymalısınız. Testlerinizi oluştururken, manifest merger her iki manifest'i birleştirecektir, ancak uygulamanızı oluştururken yalnızca ana AndroidManifest.xml kullanılacaktır.

Daha fazla ayrıntı için this answer adresine bakın.

+0

Bunu yapmayı denedim ve manifest birleşmesi, src/androidTest/AndroidManifest.xml' dosyasını yok sayıyor. –

+0

Android Gradle Plugin'in hangi sürümünü kullanıyorsunuz? –

+0

com.android.tools.build:gradle:1.2.3 –

60

Bunu Google'dan the new testing template'dan aldım.

test veya androidTest klasöründe yeni bir AndroidManifest.xml dosyası oluşturun. Ben çalışan bir kendimi bulamadım olarak

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:tools="http://schemas.android.com/tools" 
    package="your.package.name"> 

    <uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/> 
</manifest> 
4

Ben mauricegavin/android-testing çözümün bir örnek yükledim.

İlgili modül ui/uiautomator/BasicSample/app şeklindedir. AndroidTests dizininde bir AndroidManifest.xml olduğunu fark edeceksiniz. app/build.gradle'da belirttiğiniz minSdkVersion hala debug ve release yapıları için kullanılacaktır.

sample project's build.gradle'daki minSdkVersion, uiautomator tarafından desteklenmeyen ve genellikle yapının bozulmasına neden olan api 17 belirtmektedir.

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:tools="http://schemas.android.com/tools" 
    package="com.example.android.testing.uiautomator.BasicSample" > 

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

Bu örnekte kullandığım yanıtı için mattblang'a teşekkürler.

1

Bu soruyu gönderdikten sonra, debug ve release yapıları için farklı değerlere minSdkVersion değerini ayarlama fikrim de vardı. Ancak, bunun işe yarayıp yaramadığını test etme şansım olmadı.

Ayrıca this blog post'dan bir olası çalışma buldum. Ayrı test ve production tatlar oluşturun:

Kod-Çırak @
productFlavors { 
    // The actual application flavor 
    production { 
     minSdkVersion 14 
    } 
    // Test application flavor for uiautomatior tests 
    test { 
     minSdkVersion 18 
    } 
} 
+0

Lezzet için "test" ismi kabul edilemez – EliaszKubala

+0

@EliaszKubala Teşekkürler. Bu başka bir cevapta daha önce belirtilmişti. –

1

neredeyse yoktur. Ama "test", "androidTest" veya "release" için bir ürün lezzetini adlandıramazsınız. Anahtar kelime gibidir ve bu adları kullanamazsınız.

Yani cevap

productFlavors { 
     product{ 
      minSdkVersion 15 
     } 
     uiautoTest { 
      minSdkVersion 18 
     } 
    } 
+0

Gradle 2.14-1, 'ProductFlavor isimlerinin' test 'ile başlayamayacağını düşündürüyor – kit

5

bu bir deneyin.

defaultConfig { 
    applicationId "com.test" 
    if (gradle.startParameter.taskNames.contains(":app:assembleDebug")) { 
     minSdkVersion 21 
    }else{ 
     minSdkVersion 14 
    } 
    targetSdkVersion 22 
    versionCode Integer.parseInt(VERSION_CODE) 
    versionName VERSION_NAME 
} 
+0

Sadece' debug 've 'release' bloklarının içinde' if 'ifadesi olmadan aynı şeyi yapamıyorum? –

+0

Tam olarak nasıl çalıştığını bilmiyorum, ama bunu yaparsanız ** dubug ** ve ** release ** her ikisi de çağrılacak, böylece sonuncusu ayarlanacaktır. Sonucu log ile görebilirsiniz. 'debug {logger.error ("debug !!") minifyEnabled yanlış imzalamaConfig signingConfigs.debug} release {logger.error ("release !!") minifyEnabled true signingConfig imzalamaConfigs.release proguardFiles getDefaultProguardFile (' proguard-android.txt '), 'proguard-rules.pro'} ' –

0

Çözümümün lezzet yapılandırmasına göre:

  1. bölünmüş lezzet iki:
buildTypes { 
    release {...} 
    debug {...} 
} 

productFlavors { 
    dev { ... } 
    autoTest { 
     minSdkVersion 18 // set to 18 only in this flavor 
     multiDexEnabled true // if you got dex index overflow error 
     testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' 
    } 
} 
  • hareket
      Test ile ilgili bağımlılıklarınız "autoTestC" ye ompile"
  • // for test 
    autoTestCompile 'com.android.support.test:runner:0.5', { 
        exclude group: 'com.android.support', module: 'support-annotations' 
    } 
    autoTestCompile 'com.android.support.test:rules:0.5', { 
        exclude group: 'com.android.support', module: 'support-annotations' 
    } 
    autoTestCompile 'com.android.support.test.espresso:espresso-web:2.2.2', { 
        exclude group: 'com.android.support', module: 'support-annotations' 
    } 
    autoTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2', { 
        exclude group: 'com.android.support', module: 'support-annotations' 
        exclude group: 'com.android.support', module: 'support-v4' 
        exclude group: 'com.android.support', module: 'design' 
        exclude group: 'com.android.support', module: 'recyclerview-v7' 
    } 
    autoTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2', { 
        exclude group: 'com.android.support', module: 'support-annotations' 
    } 
    
    1. Koşu Testi

    Build Variant Screenshot

    İlgili konular