2015-01-07 11 views
13

मैं ./gradlew connectedAndroidTest चलाता हूं और मुझे अपनी परीक्षा एपीके की अनुमति है जो किसी भी गैर-परीक्षण एपीके (डीबग, रिलीज) में नहीं होनी चाहिए। मैं अनुमति के साथ एक प्रकट बनाया है:एंड्रॉइड परीक्षण-केवल अनुमतियां ग्रेडल

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.mypackage"> 
    <uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/> 
</manifest> 

तब मैं src/androidTest निर्देशिका को यह प्रकट की नकल की है release notes Gradle एंड्रॉयड प्लगइन से के रूप में, सुझाव देते हैं:

0.13.0 (2014/09/18) Gradle 2.1 अब यह परीक्षण क्षुधा (src/androidTest/AndroidManifest.xml)

हालांकि, अनुमति लागू नहीं किया जाता dur के लिए एक प्रकट प्रदान करने के लिए संभव है की आवश्यकता होती है मेरे जुड़े परीक्षणों में प्रवेश करना।

यदि मैं src/debug निर्देशिका बनाता हूं और वहां इस मेनिफेस्ट को स्थानांतरित करता हूं - कनेक्ट किए गए परीक्षणों के दौरान अनुमति सही ढंग से लागू होती है (लेकिन नियमित डीबग बिल्ड के दौरान भी, जो अवांछित है)।

क्या मैं कुछ गलत कर रहा हूं या कोई बग है?

उत्तर

11

समस्या connectedAndroidTest ग्रेडल कार्य कार्यों के बारे में मेरी गलतफहमी से उत्पन्न होती है। यह 2 एंड्रॉइड अनुप्रयोगों को बनाता है और तैनात करता है - एक टेस्टेबल (आपकी प्रोजेक्ट) और एक परीक्षक (एक ऐप जो उपयोगकर्ता को अनुकरण करता है जो टेस्ट करने योग्य ऐप के साथ इंटरैक्ट करता है)। मेरा इरादा टेस्टेबल ऐप को अनुमति जोड़ना था। हालांकि, src/androidTest पर एक मैनिफेस्ट जोड़ने के परिणामस्वरूप परीक्षक ऐप को अनुमति जोड़ दी गई। अगर मैं निष्पादित

adb shell pm list packages -f -3 

मैं इस

पैकेज की तरह कुछ देख सकते हैं (-3 केवल तृतीय-पक्ष संकुल सूची का मतलब है)

:: यहाँ मैं यह कैसे लगा बाहर है/डेटा/ऐप्स/SmokeTestApp .apk = com.android.smoketest पैकेज: /data/app/GestureBuilder.apk=com.android.gesture.builder पैकेज: /data/app/com.mycompany.myapp-2.apk=com.mycompany। myapp पैकेज: /data/app/SoftKeyboard.apk=com.example.android। सॉफ्टकीबोर्ड पैकेज: /data/app/org.libsdl.app-2.apk=org.libsdl.app पैकेज: /data/app/SmokeTest.apk=com.android.smoketest.tests पैकेज:/डेटा/एप्लिकेशन/com.mycompany.myapp.test-1.apk = com.mycompany.myapp.test

परीक्षण -1 प्रत्यय के साथ अनुप्रयोग है परीक्षक अनुप्रयोग, एक और एक मेरी परीक्षण योग्य एप्लिकेशन है। उनकी अनुमति जाँच हो रही है देता है:

[email protected]_x86:/ # aapt d permissions /data/app/com.mycompany.myapp-2.apk 

package: com.spredfast.android 
uses-permission: android.permission.INTERNET 
uses-permission: android.permission.WRITE_EXTERNAL_STORAGE 

[email protected]_x86:/ # aapt d permissions /data/app/com.mycompany.myapp.test-1.apk 

package: com.spredfast.android 
uses-permission: android.permission.SET_ANIMATION_SCALE 

तो अनुमति, SET_ANIMATION_SCALE, जो मैं अपने परीक्षण योग्य एप्लिकेशन में डाल करने का इरादा था परीक्षक एप्लिकेशन में डाल दिया है। कोई आश्चर्य नहीं कि मैनिफेस्ट को src/androidTest से src/debug पर ले जाया जा सकता है, यह टेस्ट करने योग्य ऐप (सही, लेकिन बहुत व्यापक) में अनुमति देगा। केवल आवेदन connectedAndroidTest कार्य के अंदर चलाया जा रहा करने के मामले में आवेदन में अनुमति डाल -


यहाँ कैसे मैं मूल समस्या हल है।

  1. मैं एक खाली निर्माण स्वाद बनाया है एकीकरण परीक्षणों के साथ इस्तेमाल किया जा रहा:

    productFlavors { 
        /** 
        * This flavor is to be run only using connectedAndroidTestAnimcontrol 
        */ 
        animcontrol {} 
    
        regular {} 
    } 
    
  2. ले जाया गया src/androidTest/AndroidManifest.xml एकल अनुमति के साथ src/animcontrol/AndroidManifest.xml में

  3. निष्पादित जुड़े परीक्षण के रूप में

    ./gradlew connectedAnimcontrolDebugAndroidTest 
    

यह चाल है, अब मेरे पास AndroidManifest.xml है जो मुख्य ऐप के मैनिफेस्ट के साथ विलय हो जाएगा जब कनेक्ट एंड्रॉइडटेस्ट के रूप में चल रहा है।

उम्मीद है कि यह किसी की मदद करेगा।

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