2012-04-24 19 views
16

मेरा प्रश्न है: मैं एंड्रॉइड लाइब्रेरी के लिए एंड्रॉइड स्टैंड-अलोन परीक्षण प्रोजेक्ट कैसे बना सकता हूं?एंड्रॉइड पर लाइब्रेरी प्रोजेक्ट के लिए स्टैंड-अलोन टेस्ट प्रोजेक्ट

मैं अपने Android पुस्तकालय और एक Android मेरी JUnit परीक्षण वर्गों युक्त परियोजना (जो "पुस्तकालय" परियोजना सेटिंग्स में के रूप में चिह्नित किया जाता है) मिल गया है। परीक्षण प्रोजेक्ट एंड्रॉइड लाइब्रेरी ("एंड्रॉइड" के तहत प्रोजेक्ट सेटिंग्स में) का सही संदर्भ देता है।

मेरा लाइब्रेरी स्रोत कोड पैकेज com.mayastudios में स्थित है। मेरे सभी परीक्षण मामले एक ही पैकेज में स्थित हैं (लेकिन एक अलग परियोजना में)।

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.spatialite.test" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

    <instrumentation 
     android:name="android.test.InstrumentationTestRunner" 
     android:targetPackage="com.mayastudios" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

    <application android:label="Spatialite-NewApi-UnitTests"> 
     <uses-library android:name="android.test.runner" /> 
    </application> 

</manifest> 

, जब मैं परीक्षण परियोजना (एडीटी के साथ चलाने के ग्रहण से हालांकि, का उपयोग करते हुए:

+- MyLibraryProject 
    +- src 
     +- com/mayastudios/MyClass.java 
    +- AndroidManifest.xml 
    +- ... 
+- MyTestProject (references MyLibraryProject) 
    +- test 
     +- com/mayastudios/MyClassTests.java 
    +- AndroidManifest.xml 
    +- ... 

यहाँ परीक्षण परियोजना के लिए एंड्रॉयड प्रकट है: तो बुनियादी तौर पर मैं इस तरह कुछ है "के रूप में चलाएं -> एंड्रॉइड जुनीट टेस्ट") मुझे निम्न त्रुटि मिलती है:

Unable to find instrumentation target package: com.mayastudios 

यहां सह है mplete कंसोल लॉग:

[2012-04-24 17:24:20 - spatialite-test] Android Launch! 
[2012-04-24 17:24:20 - spatialite-test] adb is running normally. 
[2012-04-24 17:24:20 - spatialite-test] Performing android.test.InstrumentationTestRunner JUnit launch 
[2012-04-24 17:24:20 - spatialite-test] Automatic Target Mode: using device '3732FBC2711300EC' 
[2012-04-24 17:24:20 - spatialite-test] Uploading spatialite-test.apk onto device '3732FBC2711300EC' 
[2012-04-24 17:24:20 - spatialite-test] Installing spatialite-test.apk... 
[2012-04-24 17:24:22 - spatialite-test] Success! 
[2012-04-24 17:24:22 - spatialite-test] Launching instrumentation android.test.InstrumentationTestRunner on device 3732FBC2711300EC 
[2012-04-24 17:24:22 - spatialite-test] Collecting test information 
[2012-04-24 17:24:23 - spatialite-test] Test run failed: Unable to find instrumentation target package: com.mayastudios 

मैं प्रकट से <instrumentation> टैग निकालने में जो काम नहीं किया की कोशिश की।

एक ही रास्ता मुझे मिल गया यह अब तक काम कर रहा है, एक डिफ़ॉल्ट Android परियोजना (एक गतिविधि के साथ) बनाने के अपने परीक्षण परियोजना से इसे संदर्भ और <instrumentation> तहत targetPackage के रूप में इस डिफ़ॉल्ट Android परियोजना के पैकेज के नाम का इस्तेमाल किया गया। लेकिन यह वही नहीं है जो मैं चाहता हूं। मैं एक स्टैंड-अलोन टेस्ट प्रोजेक्ट चाहता हूं।

कोई सुझाव?

+1

इंस्ट्रुमेंटेशनटेस्टरनर को कंक्रीट एपीके पर लक्षित करना होगा, जबकि लाइब्रेरी प्रोजेक्ट ने खुद को एपीके के रूप में निर्यात करने की अनुमति नहीं दी है। मैंने इसे यहां [विवरण] (http://stackoverflow.com/questions/10172636/unable-to-find-instrumentation-target-package-com-xyz/10173034#10173034) पर अधिक जानकारी में समझाया है। – yorkw

+0

हाँ, मुझे वह मिला। मैंने सोचा कि test.apk डिवाइस पर स्थापित होने के बाद से चला सकता है। –

+0

यह काम करता है जैसा कि मैंने उम्मीद की थी। नीचे मेरा जवाब देखें। –

उत्तर

25

आह, उत्तर इतना आसान है। त्रुटि परीक्षण प्रोजेक्ट के एंड्रॉइड मेनिफेस्ट में लाइन 3 में है: यहां गलत पैकेज का उल्लेख किया गया है। तो सुधारा प्रकट इस तरह दिखता है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mayastudios" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

    <instrumentation 
     android:name="android.test.InstrumentationTestRunner" 
     android:targetPackage="com.mayastudios" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

    <application android:label="Spatialite-NewApi-UnitTests"> 
     <uses-library android:name="android.test.runner" /> 
    </application> 

</manifest> 

और यह सब जो कहते हैं कि आप तीन परियोजनाओं (पुस्तकालय, परियोजना के तहत परीक्षण, परीक्षण परियोजना) की जरूरत: वे गलत हैं। एक पुस्तकालय परियोजना और एक परीक्षण परियोजना पर्याप्त हैं। परीक्षण परियोजना में एक गतिविधि भी शामिल करने की आवश्यकता नहीं है।

+0

मुझे लगता है कि 'com.mayastudios' आपकी टेस्ट प्रोजेक्ट है। एक टेस्ट प्रोजेक्ट स्वयं पर लक्षित हो सकता है, मेरा जवाब देखें [यहां] (http://stackoverflow.com/questions/9518514/is-it-possible-to-define-activity-inside-android-test-project-and- चलाने के एक परीक्षण आगा/9525354 # 9525354)। आपने वास्तव में क्या किया है बस test.apk रननेबल और स्वयं को लक्षित करें (** आप अपने लाइब्रेरी कोड ** पर लक्षित नहीं हैं)।इसे आधिकारिक देव मार्गदर्शिका में स्पष्ट रूप से बताया गया है कि आपको अप्रत्यक्ष रूप से पुस्तकालय परियोजना का परीक्षण करने के लिए एक आवेदन परियोजना की आवश्यकता है। – yorkw

+0

@yorkw: असल में, 'यह सोचते हैं परीक्षण किया जाना वांछित एंड्रॉयड पुस्तकालय परियोजना के लिए com.mayastudios' लिंक, इस पैटर्न फिट बैठता है [पेज तुम मेरी अब हटाए गए जवाब पर अपनी टिप्पणी में से जुड़ा हुआ की दूसरी बुलेट] (http://developer.android.com/guide/developing/projects/index.html#testing)। – CommonsWare

+0

@CommonsWare, Ahhhhh, मैं अब देखते हैं। सेबेस्टियन, हाँ, आप सही हैं। जानने के लायक होने से पहले कभी भी इस पैटर्न का उपयोग न करें। – yorkw

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