2011-08-30 12 views
8

मैंने में कोशिश की है कि एंड्रॉइड.जर जावा प्रोजेक्ट में, बिल्ड पथ से जेआरई को हटाएं और इस कोड को चलाएं। यह रनटाइम अपवाद फेंकता है। क्यूं कर?जावा प्रोजेक्ट में android.jar का उपयोग करना - रनटाइम अपवाद स्टब?

Exception in thread "main" java.lang.RuntimeException: Stub! 
    at android.content.ContentValues.<init>(ContentValues.java:5) 
    at JarTest.main(JarTest.java:5) 

public class JarTest { 
    public static void main(final String[] args) { 
     final ContentValues values = new ContentValues(); 
     values.put("test", "test"); 
     System.out.println(values); 
    } 
} 

सामग्रीवृत्त केवल एंड्रॉइड पर्यावरण में क्यों उपयोग किया जाता है?

उत्तर

16

एसडीके में android.jar में केवल एसडीके कक्षाओं के स्टब कार्यान्वयन होते हैं, न कि डिवाइस (या एमुलेटर) पर पाए जाने वाले वास्तविक कार्यान्वयन। जार बस वर्ग मेटाडेटा प्रदान करता है ताकि आपके ऐप्स जो एसडीके कक्षाओं का संदर्भ लें, ठीक से निर्माण करेंगे।

आप किसी भी प्रोजेक्ट को नहीं बना सकते जो एंड्रॉइड.जर का संदर्भ देता है जो एंड्रॉइड डिवाइस के बाहर चलाएगा।

+0

अन्य जावा क्लासेस ArrayList या वेक्टर जैसे क्यों काम करते हैं? – Emerald214

+1

@ Emerald214 कि जेआरई कक्षाएं आपके कक्षा में होंगी और उन्हें एक स्टब नहीं होना चाहिए लेकिन एंड्रॉइड विशिष्ट कक्षाएं स्टब्स हैं। वे एक कंकाल बनाते हैं ताकि आप जावा आईडीई का उपयोग करके अपने ऐप को कोड और संकलित कर सकें लेकिन कोड वास्तव में वहां नहीं है, शायद उनमें से कुछ जावा में भी नहीं बने हैं। – aalku

+0

क्या कोई जानता है कि मुझे असली निर्माण कहां मिल सकता है? –

5

android.jar में केवल स्टब्स हैं, जो आपको अपनी परियोजना बनाने के लिए पर्याप्त हैं, क्योंकि @antlersoft ने समझाया।

रोबोलेक्ट्रिक प्रोजेक्ट http://robolectric.org/ आपको डिवाइस का उपयोग किए बिना अपने एंड्रॉइड कोड पर परीक्षण चलाने की अनुमति देता है। उनके पास मेवेन http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.robolectric%22

पर वास्तविक निर्माण उपलब्ध हैं android-all आर्टिफैक्ट का उपयोग कर मैं एंड्रॉइड बैकएंड कोड का सफलतापूर्वक भाग रहा हूं।

आपके विशिष्ट मामले में मदद नहीं कर सकता है, क्योंकि कुछ एपीआई अभी भी सीमा से बाहर हैं, लेकिन java.lang.RuntimeException: Stub! के अधिकांश अन्य मामलों में रोबोइलेक्ट्रिक से कलाकृतियों को मदद करनी चाहिए।

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