के साथ एस्प्रेसो को एकीकृत करना जिस ऐप पर मैं काम कर रहा हूं वह ग्रैडल के साथ बनाया जा रहा है। मैं उपकरण परीक्षणों की निर्भरता के रूप में 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.** { *; }
जोड़ा जा रहा है सब कुछ काम ठीक कर देता है। ऐसा प्रतीत होता है कि प्रोगार्ड केवल मुख्य ऐप द्वारा उपयोग की जाने वाली कक्षाओं का विश्लेषण कर रहा है और यह उपकरण परीक्षण निर्भरताओं द्वारा उपयोग की तलाश नहीं कर रहा है। मेरे मुख्य ऐप द्वारा उपयोग नहीं किए जा रहे तरीकों/वर्गों, लेकिन जो कि उपकरण परीक्षणों के लिए आवश्यक हैं, को अनुकूलित किया जाना प्रतीत होता है।
मैं प्रोग्रेस को एस्प्रेसो और इसकी निर्भरताओं द्वारा आवश्यक गुवा कक्षाओं/विधियों को कैसे रख सकता हूं? यह सभी को मैन्युअल रूप से निर्दिष्ट करने के लिए व्यावहारिक प्रतीत नहीं होता है (कई उपयोग हैं), और उनमें से सभी को प्रोगार्ड के उद्देश्य को हराया जाता है।
दुर्भाग्यवश, ऐप बहुत अधिक तरीकों (पुस्तकालयों के माध्यम से) होने के कारण प्रोजेर्ड के बिना डीईएक्स चरण में विफल रहता है। गुवा बहिष्करण जोड़ने के लिए पर्याप्त छूट है लेकिन अन्य स्थानों में भी इसी तरह की त्रुटियां हो सकती हैं (यानी जहां भी विधियों/कक्षाओं का परीक्षण में उपयोग किया जाता है, लेकिन मुख्य ऐप में नहीं)। – antonyt