2015-06-02 8 views
36

के मुकाबले testAndroid के लिए अलग minSdkVersion सेट करें ऐप के मुकाबले परीक्षण के लिए अलग-अलग minSdkVersion सेट करना संभव है? मैं पूछता हूं क्योंकि मैं परीक्षण के लिए नई टेस्ट सपोर्ट लाइब्रेरी और यूआई ऑटोमेटर का उपयोग करना चाहता हूं। हालांकि, यह केवल एपीआई 18+ पर उपलब्ध है। साथ ही, मैं अभी भी एंड्रॉइड के पुराने संस्करणों का समर्थन करना चाहता हूं, भले ही पूरी तरह से परीक्षण न किया जाए। ऐसा करने के लिए मुझे अपने build.gradle फ़ाइल में जोड़ने की क्या ज़रूरत है?मुख्य ऐप

स्पष्टीकरण के लिए, मैं एंड्रॉइड स्टूडियो और "नई" ग्रैडल-आधारित परियोजना संरचना का उपयोग कर रहा हूं।

+0

मुझे लगता है कि एक स्वीकार्य जवाब यहाँ नहीं है। – theblang

+0

@mattblang अभी तक एक उत्तर स्वीकार नहीं करने के लिए मेरी माफ़ी। मैं पूरे ऐप के लिए बस 'minSdkVersion' बदल रहा हूं और अभी तक दिए गए उत्तरों को सत्यापित नहीं किया है। मैं भूल गया हूं, हालांकि, जवाब देने का मौका मिलने पर मुझे जवाब स्वीकार नहीं होगा। –

उत्तर

1

हाँ, आप कर सकते हैं। आपको src/androidTest/AndroidManifest.xml में टेस्ट-विशिष्ट मैनिफेस्ट प्रविष्टियां डालना चाहिए। अपने परीक्षणों का निर्माण करते समय manifest merger दोनों प्रकट होते हैं, लेकिन जब आपके ऐप का निर्माण होता है तो केवल मुख्य AndroidManifest.xml का उपयोग किया जाएगा। अधिक जानकारी के लिए

this answer देखें।

+0

मैंने ऐसा करने का प्रयास किया और मैनिफेस्ट विलय 'src/androidTest/AndroidManifest.xml' फ़ाइल को अनदेखा कर रहा है। –

+0

एंड्रॉइड ग्रैडल प्लगइन का कौन सा संस्करण आप उपयोग कर रहे हैं? –

+0

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

60

मुझे यह Google से the new testing template से मिला है।

अपने या androidTest फ़ोल्डर में एक नई AndroidManifest.xml फ़ाइल बनाएं।

<?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

मैं के रूप में मैं एक काम एक अपने आप को नहीं पा सके mauricegavin/android-testing का हल का एक उदाहरण अपलोड कर दिया है।

ब्याज का मॉड्यूल ui/uiautomator/BasicSample/ऐप है। आप देखेंगे कि androidTests निर्देशिका में एक AndroidManifest.xml है। minSdkVersion जो आप अपने app/build.gradle में निर्दिष्ट करते हैं, अभी भी debug और release बिल्ड के लिए उपयोग किया जाएगा।

आप देखेंगे कि sample project's build.gradle में api 17 निर्दिष्ट करता है जो यूआईयूटॉमेटर द्वारा समर्थित नहीं है और आमतौर पर निर्माण विफल हो जाता है।

<?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> 

mattblang पर उनके उत्तर के लिए धन्यवाद जिसका मैंने इस उदाहरण के लिए उपयोग किया था।

1

इस प्रश्न को पोस्ट करने के बाद, मुझे debug और release बिल्ड के लिए अलग-अलग मानों पर सेट करने का विचार भी था। हालांकि, मुझे यह जांचने का मौका नहीं मिला है कि यह काम करता है या नहीं।

मुझे this blog post से लगभग एक संभावित काम भी मिला। अलग test और production जायके बनाएँ:

productFlavors { 
    // The actual application flavor 
    production { 
     minSdkVersion 14 
    } 
    // Test application flavor for uiautomatior tests 
    test { 
     minSdkVersion 18 
    } 
} 
+0

स्वाद के लिए "परीक्षण" नाम स्वीकार्य नहीं है – EliaszKubala

+0

@EliaszKubala धन्यवाद। इसका पहले से ही एक और जवाब में उल्लेख किया गया था। –

1

@ कोड-अपरेंटिस लगभग वहाँ है। लेकिन आप "टेस्ट", "एंड्रॉइडटेस्ट" या "रिलीज" के लिए उत्पाद स्वाद का नाम नहीं दे सकते। वे कीवर्ड की तरह हैं, और आप इन नामों का उपयोग नहीं कर सकते हैं।

तो जवाब

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

ग्रैडल 2.14-1 वास्तव में सुझाव देता है कि 'उत्पादफ्लॉवर नाम' test'' – kit

5

इस एक कोशिश है।

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

से शुरू नहीं हो सकते हैं, क्या मैं 'डीबग' और 'रिलीज' ब्लॉक के अंदर 'if' कथन के बिना एक ही चीज़ नहीं कर सकता? –

+0

मुझे नहीं पता कि कैसे धीरे-धीरे काम करता है, लेकिन यदि आप ऐसा करते हैं ** dubug ** और ** रिलीज ** दोनों को बुलाया जाएगा, तो आखिरी वाला सेट किया जाएगा। आप लॉग के साथ परिणाम देख सकते हैं। 'डीबग {logger.error ("डीबग !!") minifyEnabled झूठी हस्ताक्षर हस्ताक्षर कॉन्फ़िगर करें कॉन्फ़िगर करें। defug} रिलीज {logger.error ("रिलीज !!") minifyEnabled सही हस्ताक्षर हस्ताक्षर करें कॉन्फ़िगर करें कॉन्फ़िगर करें। कृपया प्रोजेगार्डफाइल getDefaultProguardFile (' proguard-android.txt '), 'proguard-rules.pro'} ' –

0
स्वाद विन्यास के आधार पर

मेरे समाधान:

  1. विभाजन दो स्वाद के लिए:
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' 
    } 
} 
  1. चाल आपके परीक्षण से संबंधित निर्भरताओं "autoTestC में 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. भागो टेस्ट

Build Variant Screenshot

संबंधित मुद्दे