2013-11-21 15 views
5

मैं अपने मौजूदा एंड्रॉइड प्रोजेक्ट को ग्रेडल और इंटेलिजे 12 के साथ काम करने की कोशिश कर रहा हूं। पहले मैंने इसे मैवेन के साथ काम किया था, लेकिन यह धीरे-धीरे उतना लचीला प्रतीत नहीं होता था, और जो मुझे लगता है मुझे पता चला है कि मुझे कम सबफ़ोल्डर की आवश्यकता है।इंटेलिजे, एंड्रॉइड और ग्रैडल

मेरा एंड्रॉइड प्रोजेक्ट एक स्वच्छ जावा पुस्तकालय (: कोर) और वास्तविक अनुप्रयोग (: एंड्रॉइड) में बांटा गया है। ये दो परियोजनाएं मेरे मुख्य प्रोजेक्ट फ़ोल्डर में हैं।

~-+MainProject 
    |--+core 
    | L--build.gradle 
    |--+android 
    | L--build.gradle 
    |--build.gradle 
    L--settings.gradle 

मुझे लगता है कि के साथ इस इलाज के लिए आदर्श समाधान Gradle काम पाने के लिए (: कोर) और (: एंड्रॉयड) नेस्ट परियोजनाओं के रूप में परियोजना, जिसका अर्थ है मैं बस MainProject स्रोत फ़ोल्डर में मेरी cmd शुरू करने के लिए के साथ किया जा सकता है क्रमिक कार्य।

हालांकि मैं अलग समस्याओं के साथ आया था:

  1. Gradle निर्भरता केवल कोर परियोजना
    • instrumentatetionTest में है और न ही मुख्य परियोजना फाइलों में न तो इसका मतलब है कि में शामिल किए गए किसी भी निर्देशिका सही ढंग से के रूप में स्थापित कर रहे हैं स्रोत/परीक्षण निर्देशिका
    • इंटेलिजे किसी भी वर्ग को हल नहीं करता है जिसे मैंने ग्रेडल (एंड्रॉइड एसडीके, जूनिट, मॉकिटो, कोर प्रोजेक्ट से) पर निर्भरता के रूप में जोड़ा है
      • प्लगइन 'विचार' का उपयोग करने की कोशिश की लेकिन या तो मैं इसे गलत इस्तेमाल किया है या यह समस्या
  2. मैं APK
    • निर्माण कुछ करने के लिए आवश्यक के लिए डुप्लिकेट निर्भरता त्रुटि मिल का समाधान नहीं JUnit के साथ क्या: 4.11 और mockito कोर: 1.9.5 कि मैं
    • मैं क्या करने की कोशिश की कहा:
      • dependencys को हटाने -> निर्माण पाठ्यक्रम could'nt के कुछ वर्गों के कारण विफल रहता है
      • हल किया जा
      • JUnit करने के लिए बदल रहा है: सेटिंग्स -: - 4.5+ रूप में कुछ अन्य सूत्र में suggesed सभी

पर> कोई बदलाव नहीं आया यहाँ * .gradle configuartions

MainProject हैं। Gradle

include ':core', ':android' 

-

build.gradle
buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 

subprojects { 
    repositories { 
     mavenLocal() 
     maven { url "http://repo.maven.apache.org/maven2" } 
    } 
} 

: कोर - निर्माण।Gradle

apply plugin: 'java' 

dependencies { 
    testCompile 'junit:junit:4.11' 
    testCompile 'org.mockito:mockito-core:1.9.5' 
} 

: एंड्रॉयड एक

apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile project(":core") 

    compile 'com.google.android:android:4.1.1.4' 

    instrumentTestCompile 'junit:junit:4.11' 
    instrumentTestCompile 'org.mockito:mockito-core:1.9.5' 
    instrumentTestCompile 'com.google.dexmaker:dexmaker:1.0' 
    instrumentTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0' 

    instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:3.6' 
} 

/* ... androidSettings 

मुझे आशा है कि किसी को उस

MFG Dornathal

उत्तर

6

ठीक है के साथ मेरी मदद कर सकता है, ताकि आप सही विचार है, लेकिन देखते हैं आपको अभी भी कुछ बदलावों की आवश्यकता है।

आपका जड़ build.gradle फ़ाइल इस प्रकार होना चाहिए:

subprojects { 
    repositories { 
     mavenCentral() 
    } 
} 
  • आप केवल यदि आप एक स्थानीय स्तर पर स्थापित रेपो का उपयोग कर रहे mavenLocal() शामिल करने के लिए की जरूरत है। अधिकांश लोग नहीं करते हैं, और आपकी परियोजना में कुछ भी इंगित नहीं करता है कि आपको एक की आवश्यकता है।
  • mavenCentral() का उपयोग आपके द्वारा उपयोग किए जा रहे मेवेन यूआरएल को प्रतिस्थापित करने के लिए किया जा सकता है।
  • हमें केवल एंड्रॉइड प्रोजेक्ट के लिए बिल्डस्क्रिप्ट को संशोधित करने की आवश्यकता है, इसलिए हमें एंड्रॉइड प्रोजेक्ट के build.gradle पर इसे स्थानीयकृत करना चाहिए।

आपके settings.gradle और आपके build.gradle कोर प्रोजेक्ट के लिए अच्छे हैं।

आपका build.gradle एंड्रॉयड परियोजना तथापि के लिए, कुछ बदलाव की जरूरत है:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 

apply plugin: 'android' 

dependencies { 
    compile project(":core") 

    instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:3.6' 
} 
  • एंड्रॉयड प्लगइन शामिल करके, हम स्थापित एसडीके से सीधे लिंक। इसका मतलब है कि अब हमें एंड्रॉइड निर्भरता शामिल करने की आवश्यकता नहीं है: compile 'com.google.android:android:4.1.1.4'
  • हमें junit शामिल करने की आवश्यकता नहीं है। यह एसडीके द्वारा प्रदान किया जाता है, इसलिए हम इसका उपयोग करेंगे। ध्यान देने योग्य बात यह है कि एसडीके में केवल जुनीट 3.
  • हमें mockito और dexmaker शामिल करने की आवश्यकता नहीं है जब तक कि हम वास्तव में एंड्रॉइड परीक्षणों के लिए इसका उपयोग नहीं करते हैं। अगर इसका उपयोग जावा पुस्तकालय के परीक्षणों के लिए किया जा रहा है, तो हमें इसकी आवश्यकता नहीं है।

आपके सवालों के जवाब के लिए:

  1. मुझे यकीन है कि आप यहाँ क्या पूछ रहे हैं नहीं कर रहा हूँ। यह आपकी मदद कर सकता है अगर आपको अपनी प्रोजेक्ट स्ट्रक्चर में निर्देशिकाएं शामिल करनी हों जिसमें आपके पास फाइलें हों और ऐसी।
  2. आपका झुकाव सही है। हैमक्रिस्ट, जो परीक्षणों के लिए मैचर्स प्रदान करता है, ने संस्करण 1.1 और 1.3 के बीच अपने एपीआई में ब्रेकिंग बदलाव किया। जुनीट 4.11 की हैमक्रिस्ट 1.3 पर निर्भरता है। मॉकिटो 1.9.5 हालांकि, हैमक्रिस्ट 1.1 पर निर्भर करता है। तो जब दोनों शामिल होते हैं, तो 1.3 1.ओवरकिड्स करता है Mockito अब काम नहीं करता है। जुनीट 4.5 पर वापस जाना भी एक समस्या है। जूनिट 4.5 में पीओएम में निर्भरता के बजाय हैमक्रिस्ट 1.1 जार फ़ाइल के रूप में शामिल है। इसलिए जब हमारे पास एक ही फ़ाइल के 2 संस्करण होते हैं तो इससे समस्याएं उत्पन्न हो जाएंगी। जुनीट 4.10 वह तरीका है जिस तरह से आप यहां जाना चाहते हैं। इसमें हैमक्रिस्ट 1.1 पर निर्भरता है और इसे फ़ाइल के बजाय पीओएम में शामिल किया गया है। जीत जीतो! मुझे इसके साथ भी समस्याएं आई हैं, और इसे समझने का सबसे अच्छा तरीका मैवेन सेंट्रल पर पीओएम फाइलों को देखना था और देखें कि वे मुझे क्या कहते हैं।

एक अंतिम नोट।इंटेलिज 12 ग्रेडल मल्टी-प्रोजेक्ट बिल्ड को संभाल नहीं सकता है। इसके लिए आपको एंड्रॉइड स्टूडियो या इंटेलिज 13 पर स्विच करने की आवश्यकता है।

+0

सुपर अच्छा जवाब Marius। मुझे लगता है कि बिंदु 1 में उनका प्रश्न एंड्रॉइड build.gradle फ़ाइल के भीतर से टेस्ट स्रोत निर्देशिका निर्दिष्ट करने के बारे में है। लेकिन यह मेरे लिए बिल्कुल स्पष्ट नहीं है। मैं एंड्रॉइडस्टूडियो का उपयोग कर रहा हूं इसलिए मुझे यकीन नहीं है कि मेरा जवाब यहां सहायक होगा या नहीं। जुनीट टिप के लिए धन्यवाद;) – khose

+0

एंड्रॉइड स्टूडियो इंटेलिजे है क्योंकि एडीटी पहले ही बंडल हुआ है, मुझे लगता है कि इसमें कोई अंतर नहीं होना चाहिए। – Dornathal

+0

निश्चित रूप से जुनीट 4.11 के लिए उसे निर्भरता की आवश्यकता थी अगर एसडीके में केवल जुनीट 3 था – RichieHH

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