2013-11-28 7 views
13

के साथ एस्प्रेसो को एकीकृत करना जिस ऐप पर मैं काम कर रहा हूं वह ग्रैडल के साथ बनाया जा रहा है। मैं उपकरण परीक्षणों की निर्भरता के रूप में Espresso जोड़ने की कोशिश कर रहा हूं। ऐप में कुछ निर्भरताएं हैं, जिनमें से एक गुवा 15.0 है। इस काम को करने के लिए, मैं स्पष्ट निर्भरताओं के साथ एस्प्रेसो के संस्करण का उपयोग करता हूं, और बंडल किए गए गुवा को छोड़कर (इसके बजाय अपने स्वयं का उपयोग कर)।प्रोग्रेस और ग्रैडल

dependencies { 
    ... 
    instrumentTestCompile fileTree(dir: 'libs/espresso-dependencies', include: '*.jar') 
    compile 'com.google.guava:guava:15.0' 
    ... 
} 

जब मैं gradle connectedInstrumentTest साथ बनाने की कोशिश, मुझे याद आ तरीकों और वर्गों से संबंधित त्रुटियों को मिलता है।

java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState 
at com.google.android.apps.common.testing.ui.espresso.base.InputManagerEventInjectionStrategy.<init>(InputManagerEventInjectionStrategy.java:35) 

मेरी Proguard config को -keep class com.google.common.** { *; } जोड़ा जा रहा है सब कुछ काम ठीक कर देता है। ऐसा प्रतीत होता है कि प्रोगार्ड केवल मुख्य ऐप द्वारा उपयोग की जाने वाली कक्षाओं का विश्लेषण कर रहा है और यह उपकरण परीक्षण निर्भरताओं द्वारा उपयोग की तलाश नहीं कर रहा है। मेरे मुख्य ऐप द्वारा उपयोग नहीं किए जा रहे तरीकों/वर्गों, लेकिन जो कि उपकरण परीक्षणों के लिए आवश्यक हैं, को अनुकूलित किया जाना प्रतीत होता है।

मैं प्रोग्रेस को एस्प्रेसो और इसकी निर्भरताओं द्वारा आवश्यक गुवा कक्षाओं/विधियों को कैसे रख सकता हूं? यह सभी को मैन्युअल रूप से निर्दिष्ट करने के लिए व्यावहारिक प्रतीत नहीं होता है (कई उपयोग हैं), और उनमें से सभी को प्रोगार्ड के उद्देश्य को हराया जाता है।

उत्तर

-6

परीक्षण के दौरान अपने एपीके को प्रोजेक्ट न करें, जब तक आपको बिल्कुल नहीं करना पड़े।

+5

दुर्भाग्यवश, ऐप बहुत अधिक तरीकों (पुस्तकालयों के माध्यम से) होने के कारण प्रोजेर्ड के बिना डीईएक्स चरण में विफल रहता है। गुवा बहिष्करण जोड़ने के लिए पर्याप्त छूट है लेकिन अन्य स्थानों में भी इसी तरह की त्रुटियां हो सकती हैं (यानी जहां भी विधियों/कक्षाओं का परीक्षण में उपयोग किया जाता है, लेकिन मुख्य ऐप में नहीं)। – antonyt

11

यहाँ क्या मेरे लिए काम किया है:

build.gradle में मैं अपने defaultConfig अनुभाग के लिए इस लाइन कहा:

testProguardFile "test-proguard-rules.pro"

तब मैं test-proguard-rules.pro बनाया निम्नलिखित सामग्री के साथ :

-dontobfuscate 
-dontwarn 

यह आपके परीक्षण APK के लिए इस अलग ProGuard विन्यास का उपयोग करने के Gradle बताता है, एक अपने instrume युक्त ntation परीक्षण। इस मामले में आप प्रोजेवार्ड को अपने टेस्ट एपीके को खराब करने के लिए कह रहे हैं, जो शायद आप चाहते हैं। आपके द्वारा परीक्षण किए जा रहे मुख्य एपीके को अभी भी आपके मौजूदा प्रोजेवार्ड कॉन्फ़िगरेशन का उपयोग करके obfuscated हो जाता है।

+2

आप उन सभी कॉलों से कैसे निपटते हैं जो परीक्षण एपीके मुख्य ऐप को बनाता है। चूंकि मुख्य ऐप में कक्षा और विधियों को प्रोगार्ड द्वारा खराब कर दिया गया था, तो उन एपफ्यूस्केटेड विधियों/कक्षा को कैसे ऐप कॉल करेंगे? –

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