android - एंड्रॉइड स्टूडियो:Build.gradle को जटिल बिल्ड.एक्सएमएल को माइग्रेट करें




ant android-studio android-gradle (3)

  • सबसे पहले, मेरा सुझाव है कि आप एंड्रॉइड स्टूडियो को लीगेसी प्रोजेक्ट आयात करते हैं I यह आपके लिए उपयुक्त build.gradle स्क्रिप्ट बना देगा।
  • और फिर, आप अपने परियोजना की जड़ में gradlew tasks को निष्पादित करके कार्य सूची की सूची कर सकते हैं।
  • कुछ कार्यों पर निर्भर होने के लिए, आप कमांड का उपयोग कर सकते हैं जैसे कि init.dependsOn anotherTask

मैंने अपना प्रोजेक्ट सफलतापूर्वक ग्रहण से एंड्रॉइड स्टूडियो में माइग्रेट किया है और एक डिफ़ॉल्ट बिल्ड.ग्रील फ़ाइल तैयार की गई है। परियोजना सही तरीके से तैयार करती है और मैं डीबग आदि पर तैनात कर सकता हूं।

असली समस्या हालांकि रिलीज़ एपीके फाइलों (कमांड लाइन से) का निर्माण कर रही है, जिसके लिए मैं कस्टम एंट-बिल्ड (कमांड लाइन के माध्यम से कॉल किया जाता था, ग्रहण से बाहर नहीं) था।

मेरे कस्टम बिल्ड.xml ने एसडीके फ़ोल्डर से मानक sdk build.xml फ़ाइल को आयात किया है:

<import file="${sdk.dir}/tools/ant/build.xml" />

तो मुझे अपने निर्माण में कुछ करना था। XML लक्ष्य को ओवरराइड करना था या "निर्भर" के माध्यम से उन्हें हुक कर देना था।

ओवरराइड के लिए एक उदाहरण:

<target name="-set-release-mode" depends="-set-mode-check">
    <!--Here I rename my output apk files to something like: myapp-versionFromAndroidManifest.apk -->
</target

और निर्भरता जोड़ने के लिए एक उदाहरण:

<target name="-pre-build" depends="clean">
    <!-- my custom code where I copy resource files, process command line arguments   
     use xpath to extract things like the version from the AndroidManifest.xml and 
     write them into custom xml files etc... -->
</target

तो कुल मिलाकर पूरे मामले में चींटी का इस्तेमाल करना वास्तव में सरल था। लेकिन अब जब यह धीरे-धीरे पलायन करने की बात आती है तो मैं पूरी तरह से नुकसान में हूं, मैंने पहले जो चींटी में किया था, वह पूरा करने के लिए, विशेष रूप से:

  1. Build.xml के लिए एक डिफ़ॉल्ट बिल्ड.एक्सएमएल है जिसे मैं अपनी एंट बिल्ड में आयात कर रहा हूं - एक मानक बिल्ड.एड्रैडल फ़ाइल कहीं मौजूद है, इसलिए मैं परिभाषित कार्यों को देख सकता हूं?
  2. क्या यह ग्रेड के कामों को ओवरराइड करना संभव है और यदि हां: कैसे?
  3. मैं बहुत स्पष्ट हूँ कि निर्भर करता है = "..." चींटी से धीरे-धीरे मढ़े हुए हो सकते हैं लेकिन मुझे नहीं पता कि कैसे और इसके लिए प्रश्न 1 का जवाब भी होगा।

मैंने ट्यूटोरियल्स का एक गुच्छा, भी माइग्रेशन ट्यूटोरियल (जैसे कि दुर्भाग्यवश मेरी समस्याओं का समाधान नहीं किया) चलाया:

http://keepsafe-engineering.tumblr.com/post/87818767721/migrating-android-app-from-ant-to-gradle

http://ryanharter.com/blog/2013/07/17/migrating-android-projects-to-gradle/

मैंने इस अध्याय को gradle डॉक्स से भी पढ़ा था जो वास्तव में बिल्कुल मदद नहीं करता, क्योंकि उस बात के लिए प्रश्न 1 या 2 या 3 का जवाब नहीं देता है:

http://www.gradle.org/docs/current/userguide/ant.html

निम्नलिखित कुछ दिलचस्प संकेत दिए हैं:

http://toastdroid.com/2014/03/28/customizing-your-build-with-gradle/

मैंने भी अपने खुद के build.xml में एसडीके फ़ोल्डर से डिफ़ॉल्ट बिल्ड.एमएमएल की प्रतिलिपि बनाने की कोशिश की और फिर बस उस चींटी बिल्ड फाइल को क्रमशः में आयात करने और चींटी कार्य निष्पादित करने की कोशिश की जो बिल्ड की किक करती है:

<target name="release"
            depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"
            description="Builds the application in release mode.">
</target>

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


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

एंड्रॉइड स्टूडियो: ग्रैडल उत्पाद फ्लेवर: कस्टम गुणों को परिभाषित करें

अब दूसरा हिस्सा मेरे जावा कोड को कॉल करना था, जो कुछ सामान मैं वास्तव में groovy / gradle में स्थानांतरित नहीं करना चाहता था। इस प्रकार मुझे यह पता चल गया कि कैसे मेरी जावा क्लास (यद्यपि मुझे वास्तव में एक जार फ़ाइल बनाना है) को धीरे-धीरे लिपि से निष्पादित करना है:

एंड्रॉइड स्टूडियो ग्रैडल: स्थिर जावा विधि निष्पादित करें (एएनटी से ग्रैडल तक प्रवास)

अगर किसी के पास प्रश्न हैं, तो मैं अपनी पूरी कोशिश करने और उनका जवाब देने में खुशी होगी।


बस एक और प्रदर्शन imporvement टिप:

एंड्रॉइड स्टूडियो 3.0 में डी 8 नामक नया डीईएक्स कंपाइलर शामिल है।

"डेक्स कंपाइलर ज्यादातर आपके दिन-प्रति-दिन ऐप विकास में हुड के नीचे काम करता है, लेकिन यह आपके ऐप के निर्माण समय, .ex फ़ाइल आकार और रनटाइम प्रदर्शन को सीधे प्रभावित करता है।"

"और वर्तमान डीएक्स कंपाइलर के साथ नए डी 8 कंपाइलर की तुलना करते समय, डी 8 तेजी से संकलित करता है और छोटे या डीडीएक्स फ़ाइलों को आउटपुट करता है, जबकि एक ही या बेहतर ऐप रनटाइम प्रदर्शन होता है।"

डी 8 वैकल्पिक है - इसका उपयोग करें हमें प्रोजेक्ट की gradle.properties में रखना होगा

android.enableD8=true

अधिक जानकारी: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

पुनश्च। यह मेरे निर्माण समय को लगभग 30% तक लगा देता है।





android ant gradle android-studio android-gradle