2012-05-31 9 views
6

मैं चींटी का उपयोग कर एक एंड्रॉइड एपीके संकलित कर रहा हूं। एपीके एक ऐसे वातावरण में स्थापित किया जाएगा जिसमें एक जार फ़ाइल है (इसे foo.jar कहते हैं)। तो एपीके को संकलन के दौरान foo.jar के बारे में जानने की आवश्यकता होगी, लेकिन मैं नहीं चाहता कि इसे classesर्थ.एक्स में शामिल किया जाए (क्योंकि यह पहले से ही उपलब्ध होगा)।एंड्रॉइड चींटी बिल्ड - जेएआर के खिलाफ संकलन कैसे करें लेकिन इसे class.dex से बाहर कर दें?

कृपया ध्यान दें कि यह 'libs' निर्देशिका में जार डालने की बात नहीं है। हालांकि यह समस्या के 'संकलन' भाग को हल करता है, यह jar को classesर्थ.dex से बाहर रखने की समस्या का समाधान नहीं करता है।

आपकी मदद के लिए अग्रिम धन्यवाद।

उत्तर

1

किसी अन्य निर्देशिका में जार डालने के बारे में (कहें, foo/) और संकलन क्लासपाथ में जोड़ना? इस तरह जेएआर "निर्यात" नहीं है और इसलिए डीएक्स उपकरण द्वारा कार्य नहीं किया जाता है।

+0

उत्तर के लिए धन्यवाद - मैं समझता हूं कि आप क्या कह रहे हैं, और यह काम करना चाहिए ... यदि कोई कक्षा है संकलन के लिए प्रयोग किया जाता है लेकिन डीएक्स उपकरण द्वारा कार्य नहीं किया जाता है। जब भी मैं संकलन वर्गपाथ में जार प्राप्त करता हूं, यह डीएक्स द्वारा भी किया जाता है। क्या आप उन्हें अलग करने का तरीका जानते हैं? – user1103993

+2

आम तौर पर, संकलन क्लासपाथ में मौजूद फ़ोल्डर _not_ को 'classes। Dex' में जोड़ा जाता है। आपको उन जेएआरएस को स्पष्ट रूप से निर्यात करने की आवश्यकता है जिन्हें आप डीईएक्स में संकलित करना चाहते हैं। हालांकि, एक सुविधा के रूप में, एसडीके उपकरण एक विशेष मामले के रूप में 'libs/'फ़ोल्डर पर विचार करते हैं। इस फ़ोल्डर में कुछ भी स्वचालित रूप से 'classes। Dex' में जोड़ा जाता है। इसलिए, एक अलग नाम के साथ फ़ोल्डर बनाने का प्रयास करें और इसे कक्षापथ में जोड़ें। अधिक जानकारी के लिए [यह] पढ़ें (http://tools.android.com/recent/dealingwithdependenciesinandroidprojects)। ध्यान दें कि इन परिवर्तनों को एसडीके टूल्स आर 17 में पेश किया गया था। – curioustechizen

+0

मदद के लिए फिर से धन्यवाद। मैं आपको वोट दूंगा, लेकिन एक नौसिखिया के रूप में, मेरे पास पर्याप्त प्रतिष्ठा नहीं है। – user1103993

1

मेरे लिए क्या काम करता है संकलन से पहले "libs" निर्देशिका में संकलन से पहले "libs" निर्देशिका को प्रतिलिपि बनाने के लिए, "-pre-compile" में, और फिर इन फ़ाइलों को फिर से "libs" से संकलित करने के बाद टैगेट में हटाएं "-पोस्ट -compile "।

नोट:

  • अगर मैं लक्ष्य में प्रतिलिपि बनाई गई फ़ाइलें "-पूर्व निर्माण" यह काम नहीं किया, यह लक्ष्य होना ही था "पूर्व संकलन"
  • मैं पथ सेट करना पड़ा "परियोजना .all.jars.path संकलन के लिए "libs.ads.dir" त्रुटियों

से बचने के लिए मेरी चिपकाया कोड उदाहरण में कॉपी करने के बाद मैं निर्देशिका संपत्ति द्वारा संदर्भित में जार की जरूरत है ", लेकिन उनमें में शामिल नहीं करना चाहते मेरा जार:

<target name="-pre-compile"> 
    <copy todir="${jar.libs.dir}"> 
     <fileset dir="${libs.ads.dir}"/> 
    </copy> 

    <path id="project.all.jars.path"> 
     <fileset dir="${jar.libs.dir}"> 
      <include name="**/*.jar"/> 
     </fileset> 
    </path> 
</target> 

<target name="-post-compile" > 
    <delete> 
     <fileset dir="${jar.libs.dir}" casesensitive="yes"> 
      <present present="both" targetdir="${libs.ads.dir}"/> 
     </fileset> 
    </delete> 
</target> 
+0

मैंने इसे इसी तरह हल किया है, लेकिन मुझे java.io.FileNotFoundException "संकलित फ़ाइलों को कनवर्ट करना और क्लास.dex में बाहरी" चरण में मिलता है, आप इसे खींचने की कोशिश करने से डेक्सिंग को कैसे रोकते हैं? – Nthalk

6

संकलन के लिए क्लासपाथ्रफ़ के रूप में कॉम्पैइल द्वारा उपयोग किए जाने वाले दो पथ हैं लेकिन इनमें से एक का उपयोग डिस्क्सिंग में नहीं किया जाता है।

<target name="-compile" depends="-build-setup, -pre-build, -code-gen, -pre-compile"> 
    <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping..."> 
     <!-- merge the project's own classpath and the tested project's classpath --> 
     <path id="project.javac.classpath"> 
      <path refid="project.all.jars.path" /> 
      <path refid="tested.project.classpath" /> 
     </path> 
     <javac encoding="${java.encoding}" 
       source="${java.source}" target="${java.target}" 
       debug="true" extdirs="" includeantruntime="false" 
       destdir="${out.classes.absolute.dir}" 
       bootclasspathref="project.target.class.path" 
       verbose="${verbose}" 
       classpathref="project.javac.classpath" 
       fork="${need.javac.fork}"> 
      <src path="${source.absolute.dir}" /> 
      <src path="${gen.absolute.dir}" /> 
      <compilerarg line="${java.compilerargs}" /> 
     </javac> 
     … 
</target> 

इन रास्तों "project.all.jars.path" और "tested.project.classpath" लेकिन पथ "tested.project.classpath" Dexing में उपयोग नहीं कर रहा है तो आप पूर्व में इसे संशोधित कर सकते हैं इस तरह -compile लक्ष्य:

<target name="-pre-compile" > 
    <path id="tmp"> 
     <pathelement path="${toString:tested.project.classpath}"/> 
     <fileset dir=“${exported.jars.dir}” > 
      <include name="*.jar" /> 
     </fileset> 
    </path> 
    <path id="tested.project.classpath"><pathelement path="${toString:tmp}"/></path> 
    <path id="tmp"/>   
</target> 

यहाँ, आप अपने निर्यात जार के पथ जोड़ "tested.project.classpath" से पहले संकलन शुरू होता है आप "exported.jars.dir" अपने चींटी में डाल सकते हैं करने के लिए।। गुण फ़ाइल

+0

मैं इसे धीरे-धीरे कैसे कर सकता हूं? धन्यवाद। – inder

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