2014-10-07 4 views
20

मैं निम्नलिखित निर्देशिका संरचना (जो एंड्रॉयड स्टूडियो द्वारा सेटअप था) का उपयोग कर परीक्षण करने के लिए कोशिश कर रहा हूँ अनदेखा किया जा रहा: AndroidManifest

test directory structure

मैं ठीक कुछ परीक्षण चला सकते हैं, और यहां तक ​​कि AllTests.java AndroidManifest.xml फ़ाइल के बिना भी ठीक है। बात यह है कि, मेरे नए परीक्षणों में से एक के लिए, मुझे android.permission.INTERNET अनुमति की आवश्यकता है।

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.example.core" 
      android:versionCode="2" 
      android:versionName="2.0" > 

    <uses-sdk android:minSdkVersion="8" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
</manifest> 

दुर्भाग्य से, यह काम नहीं करता है: तो, मैं AndroidManifest.xmlandroidTest निर्देशिका के भीतर स्थित फ़ाइल में निम्न गयी।

ई/RestAPIRequestTest: जब मैं अपने परीक्षणों में से एक को चलाने मैं अभी भी निम्न त्रुटि हो रही है (? लापता इंटरनेट अनुमति) अनुमति अस्वीकृत

मैं package की स्थापना com.example.core.test होने की कोशिश की है मेरी AndroidManifest.xml फ़ाइल में (क्योंकि यह मेरी सेटिंग्स-> ऐप्स सूची में दिखाया गया है), लेकिन बिना किसी खुशी के।

मुझे लगता है कि यह AndroidManifest.xml फ़ाइल को भी पहचान नहीं रहा है, क्योंकि संस्करण संख्या परीक्षण ऐप के लिए सेटिंग्स में दिखाई नहीं दे रही है।

मैं अपने परीक्षण प्रोजेक्ट के लिए सही अनुमति कैसे लगा सकता हूं?

+1

मुझे पता है कि यह एक साल पहले था, लेकिन क्या आपको कभी यह हल हो गया? Src/androidTest/AndroidManifest.xml में मेरा मैनिफेस्ट पूर्ण मैनिफेस्ट में विलय नहीं किया जा रहा है। – Andrew

+0

@Andrew मैं दुर्भाग्यवश, इसके लिए एक संतोषजनक उत्तर नहीं ढूंढ पाया। हमारी परीक्षण संरचना में काफी बदलाव आया है, इसलिए यह अब मेरे लिए कोई मुद्दा नहीं है, लेकिन बदलाव से पहले, मेरे लिए कोई भी जवाब काम नहीं कर रहा था। :( – jwir3

उत्तर

17

मुझे कुछ ऐसा करने की ज़रूरत है। मैंने एंड्रॉइडटेस्ट के बगल में "डीबग" नामक एक फ़ोल्डर बनाया, जो ऐप के डीबग संस्करण से मेल खाता है, और उस फ़ोल्डर में अनुमति के साथ एंड्रॉइडमैनीफेस्ट.एक्सएमएल डालता है। तब अनुमति परीक्षण के तहत काम करती है क्योंकि परीक्षण ऐप डीबग संस्करण का उपयोग करता है। यह आदर्श नहीं है क्योंकि यह परीक्षण और डीबग के बीच की रेखा को धुंधला करता है, जो काफी समान नहीं है।

मुझे लगता है कि क्या हो रहा है यह है कि एंड्रॉइडटेस्ट/एंड्रॉइडमैनीफेस्ट.एक्सएमएल में अनुमतियां ऐप पर जा रही हैं, लक्ष्य ऐप नहीं, हालांकि वास्तव में दो अलग-अलग एपीके या क्या हैं, तो यह 100% स्पष्ट नहीं है।

+0

धन्यवाद! मेरे लिए एकमात्र समाधान काम किया। सहमत है कि यह आदर्श नहीं है लेकिन कम से कम यह काम करता है, यह भी कुछ है ... –

+0

इसका कारण यह है कि 'डिफ़ॉल्ट रूप से, सभी परीक्षण डीबग बिल्ड प्रकार के खिलाफ चलते हैं।'। आप इसके बारे में और अधिक पढ़ सकते हैं [यहां] (https://developer.android.com/studio/test/index.html#change_the_test_build_type) – epool

+0

जिसने मुझे घंटे बचाया! –

10

एंड्रॉइड स्टूडियो और एंड्रॉइड ग्रैडल प्लगइन के पुराने संस्करणों में एंड्रॉइडटेस्ट/एंड्रॉइडमैनिफेस्ट.एक्सएमएल फाइल को अनदेखा कर दिया गया था। यह उस समय tools.android.com साइट पर दस्तावेज किया गया था।

एंड्रॉइड स्टूडियो 1.0+ और एंड्रॉइड ग्रैडल 1.0+ प्लगइन लॉन्च के साथ दिसंबर 2014 में एंड्रॉइडमैनीफेस्ट.एक्सएमएल फाइल को सामान्य मुख्य/एंड्रॉइडमैनिफेस्ट.एक्सएमएल फाइलों के साथ विलय किया जाना चाहिए (डीबग के अलावा और मैनिफेस्ट फाइलों को रिलीज करने के अलावा मौजूद)। मैनिफेस्ट विलय rules are here के बारे में अधिक जानकारी।

आप अभी भी समस्या आती है या सिर्फ प्रकट संबंधित परीक्षण मुद्दों की डिबगिंग रहे हैं, तो कोशिश यह (Windows के लिए थोड़ा इस अनुकूलन): एक टर्मिनल

  • बदलने के लिए

    1. ड्रॉप अपनी परियोजना निर्देशिका के लिए cd MyApplication
    2. अपना प्रोजेक्ट बनाएं, मान लीजिए कि 'डीबग' वह बिल्ड प्रकार है जिसे आप परीक्षण करना चाहते हैं, लेकिन आप 'रिलीज' या परिभाषित बिल्ड स्क्रिप्ट के साथ परीक्षण भी कर सकते हैं। ./gradlew assembleDebugTest
    3. तो आपके परीक्षण APK प्रकट निरीक्षण: ls app/build/intermediates/manifests/test/debug/AndroidManifest.xml
    4. आपके आवेदन APK मेनिफेस्ट देखें: ls app/build/intermediates/manifests/full/debug/AndroidManifest.xml
    5. एक मर्ज उत्पादन लॉग प्रकट मर्ज करने की प्रक्रिया का ब्यौरा पाया जा सकता है: ls app/build/outputs/apk/manifest-merger-debug-report.txt

    एक अतिरिक्त नोट्स के जोड़े:

    • एक उपकरण तत्व स्वचालित रूप से आपके परीक्षण एपीके के एंड्रॉइडमैनिफेस्ट.एक्सएमएल में जोड़ा जाता है, इसलिए आपको केवल अतिरिक्त गतिविधियां, अनुमतियां आदि जोड़नी चाहिए, जिन्हें आपके परीक्षण एपीके की आवश्यकता है।
    • यदि नकली स्थानों के साथ परीक्षण आपके आवेदन एपीके को ACCESS_MOCK_LOCATION अनुमति की आवश्यकता होगी। आप अपनी डीबग/AndroidManifest.xml फ़ाइल में अनुमति जोड़ सकते हैं या आप परिभाषित कर सकते हैं कि परीक्षण एपीके और एप्लिकेशन एपीके को उसी उपयोगकर्ता आईडी का उपयोग करना चाहिए जब तैनात किया गया हो (आपके AndroidManifest.xml में SharedUserId विशेषता)।
  • 2

    निर्दिष्ट here निर्दिष्ट उपकरणों के दौरान, दो। एपीके फाइलें उत्पन्न होती हैं। यदि आप एक नज़र डालते हैं, तो सबसे छोटा यह शायद app-debug-androidTest-unaligned.apk नामक एक है और वास्तव में प्रदान की गई अनुमतियां शामिल करता है।

    aapt d permissions <apk_file_path>.apk के साथ फ़ाइल का निरीक्षण करना उन सभी की एक सूची देखने के लिए उपयोगी हो सकता है।

    अब, संदर्भ के साथ कोई समस्या हो सकती है जहां अनुमति का अनुरोध किया जाता है। मुझे एक ही समस्या थी, एसडी कार्ड पर कुछ स्क्रीनशॉट लिखने की कोशिश कर रहा था (इस प्रकार WRITE_EXTERNAL_STORAGE अनुमति की आवश्यकता है)।

    यह answer ने मुझे समस्या को ठीक करने में मदद की, हालांकि मैं पूरी तरह समझ नहीं पा रहा हूं कि यह क्यों जरूरी है।

    कुछ शब्दों में, आपको एक ही डिवाइस पर दोनों apks इंस्टॉल होने पर अनुमतियों को मर्ज करने के लिए अनुमतियों को मर्ज करने के लिए उसी android:sharedUserId को घोषित करने की आवश्यकता होगी - यह तब होता है जब परीक्षण चल रहे होते हैं। इससे मुझे उत्पादन में से किसी एक के परीक्षण के लिए आवश्यक अनुमतियों को अलग करने में मदद मिली।

    0

    एक समाधान एकल एपीके और एकल एपीके में टेस्ट एपीके बनाने जैसा होगा। उदाहरण: ./gradlew clean :main:assembleDebug :main:assembleDebugAndroidTest

    यह एक नया उपकरण मुख्य एप्लीकेशन तैयार करेगा जिसमें परीक्षण आवेदन के लिए आवश्यक सभी अतिरिक्त अनुमतियां होंगी।

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