Android के लिए स्काला प्रोग्रामिंग


258

मैंने स्कैला और एंड्रॉइड पर स्कैला 2.7.3 फाइनल के साथ ट्यूटोरियल का पालन किया है । परिणामी एंड्रॉइड ऐप काम करता है लेकिन यहां तक ​​कि सबसे बुनियादी एप्लिकेशन को संकलन करने के लिए कई मिनट (!) लगते हैं और 900 केबी संपीड़ित की आवश्यकता होती है, जो मोबाइल एप्लिकेशन के लिए शो स्टॉपर है। इसके अतिरिक्त, आईडीई हर बार मेमोरी से बाहर चला जाता है। मुझे लगता dexहै जैसे बड़े पुस्तकालयों के लिए नहीं बनाया गया है scala-library

  • तो मेरा सवाल यह है कि क्या किसी ने वास्तव में ऐसा किया है और क्या इसका कोई इलाज है?

जवाबों:


128

मैंने स्काला में कुछ बुनियादी एंड्रॉइड एप्लिकेशन लिखे हैं, कुछ भी नहीं महाकाव्य। जावा प्रोग्रामर नहीं होने के कारण मुझे "ट्रीशेक" का उपयोग करने का सुझाव दिया गया था, मुझे एक दोस्त द्वारा समझाया गया था कि यह जार फ़ाइलों से सभी अनावश्यक पुस्तकालयों को हटा देता है।

मैंने इसे प्रलेखित नहीं किया है, लेकिन मैंने पाया कि किसी और के पास पहले से ही है:

http://chneukirchen.org/blog/archive/2009/04/programming-for-android-with-scala.html

प्रोगार्ड एकमात्र समाधान नहीं है, आपको ऐसा कुछ मिल सकता है जो आपके कार्य प्रवाह के अनुकूल हो या आपके पर्यावरण के लिए अधिक अनुकूल हो।

इसके अतिरिक्त गूगल ने सिर्फ JACK को महसूस किया है, जो बिल्ड और मेमोरी टाइम को कम करने के लिए बहुत से काम करता है https://source.android.com/source//ack.html देखें


3
धन्यवाद! मुझे यह कोशिश करनी होगी। मुझे आश्चर्य है कि क्या इसे ग्रहण (स्काला और एंड्रॉइड प्लगइन्स का उपयोग करके) के साथ इस्तेमाल किया जा सकता है
लेमी

36
Lemmy - क्या कोई कारण है जो आपने इस उत्तर को स्वीकार नहीं किया है? शायद आपको एक बेहतर समाधान मिला?
बोसोन

3
मेरे अनुभव में, तमाम नैटिवियल स्कैला कोड के लिए ट्रीशेक पर्याप्त नहीं है। यह सिर्फ पर्याप्त आक्रामक नहीं है।
जेम्स मूर

45

अब आप Scala में Android एप्लिकेशन बनाने के लिए ग्रैडल के लिए एंड्रॉइड प्लगइन का उपयोग कर सकते हैं। यह परिणामी एपीके फ़ाइल से वसा को ट्रिम करने के लिए प्रोगार्ड टूल को शामिल करता है, इसलिए यह आपकी आवश्यकताओं को पूरा करता है।

https://github.com/jvoegele/gradle-android-plugin/wiki


बहुत अच्छा काम करता है! मेरे द्वारा किए गए समाधानों में से किसी ने भी बॉक्स से बाहर काम नहीं किया, लेकिन आपके ग्रैडल प्लगइन ने मुझे उपयोगी फीडबैक दिया ताकि मैं आसानी से ठीक कर सकूं कि क्या गलत हो रहा है।
Mendelt

जेसन, क्या आप अभी भी इस पर काम कर रहे हैं? अंतिम प्रतिबद्ध 9 महीने पहले था और तब से ग्रेड टकराया गया है।
पीटर अज़ताई

पीटर, इस तथ्य के कारण विकास रुक गया है कि ग्रैडल अब एंड्रॉइड के लिए मूल निर्माण प्रणाली है।
जेसन वोगेले

22

Scala- आधारित बिल्डर sbt : sbt-android-plugin के लिए एक प्लगइन भी है ।


1
यह प्लगइन SBT के नवीनतम संस्करणों के साथ संगत नहीं है। क्या आप अभी भी इस प्लगइन को बनाए हुए हैं? एक एसबीटी प्लगइन है कि है इस के नवीनतम संस्करणों के साथ संगत Android-SDK-प्लगइन
DCKing


15

मैंने इस विस्तृत समाधान को ग्रहण 3.7, स्काला 2.10 और प्लग-इन AndroidProguardScala v50 के साथ सत्यापित किया:

https://stackoverflow.com/a/11084146/1287856

सब कुछ ठीक काम करता है। स्केलफाइड मुख्य गतिविधि वर्ग के साथ एक साधारण परीक्षण आवेदन केवल 38Kb लेता है। पुस्तकालय परियोजनाओं का समर्थन किया जाता है। परियोजना को निर्यात करते समय रक्षक सक्रिय है।


3
यह बहुत अच्छा लग रहा है। एक डिवाइस पर तैनात करते समय (एक तुलनीय जावा एंड्रॉइड प्रोजेक्ट को तैनात करने की तुलना में) इस समाधान के साथ समय कैसे बनाया जाता है?
21 अक्टूबर को दुष्टकांडबाग

1
एक उपकरण को तैनात करते समय बिल्ड समय लगभग 10 सेकंड है। मुझे उम्मीद है कि यह किसी दिन तेजी से होगा।
मिकाइल मेयर

6
कुछ नए अच्छे कैश कार्यान्वयन के कारण, यह सबसे अंतिम एंड्रॉइड एसडीके और प्लग-इन के साथ लगभग 1 सेकंड का समय लेता है।
मिकाइल मेयर

7

स्काला के लिए एंड्रॉइड ऐप विकसित करना लगातार विकसित हो रहा है। इसे करने का वर्तमान सबसे अच्छा तरीका एसबीटी को एंड्रॉइड-एसडीके-प्लगइन के साथ संयोजन में प्रकट होता है , जो कि * मेरे स्कैला / एंड्रॉइड प्रोजेक्ट में मेरे लिए अच्छी तरह से बना हुआ है और मेरे लिए अच्छा काम करता है। एक हालिया उदाहरण जो पहले से ही वर्णित स्कैलॉइड के साथ इस प्लगइन के उपयोग को दर्शाता है वह भी पाया जा सकता है

कृपया ध्यान दें कि यह प्रश्न स्टैक ओवरफ्लो पर पुराने उत्तरों के साथ एक प्रश्न का एक विशिष्ट उदाहरण है । यह उत्तर कुछ बिंदु पर पुराना हो जाएगा।

* इस उत्तर धागा में वर्णित अन्य एसबीटी आधारित परियोजनाएं लिखने के समय पिछले छह महीनों में उनके लिए कोड नहीं लिखी गई हैं। उनके पास स्काला और एसबीटी के नए संस्करणों के साथ संगतता के मुद्दे हो सकते हैं।


6

यदि आप मावेन का उपयोग करते हैं, तो स्टार्टअप टेम्प्लेट के रूप में एंड्रॉइड-स्काला-टेस्ट का उपयोग करें । यह मेरे लिए बहुत अच्छा काम करता है।

Scaloid , Scala में लिखा गया एक Android API आवरण है, जो आपको अपने Android कार्यक्रम को Scala-style में लिखने में मदद करता है।


4

आप एसबीटी के बिना एंड्रॉइड पर स्काला का उपयोग कर सकते हैं, इसे एंड्रॉइड एप्लिकेशन बनाने के लिए ग्रैडल द्वारा बाहरी रूप से बनाया गया है। https://github.com/yareally/android-scala-intellij-no-sbt-plugin

ग्रैड एसबीटी की तुलना में एंड्रॉइड के लिए अधिक देशी निर्माण उपकरण है।

स्केला क्लाइंट और सर्वर साइड सॉल्यूशन कॉन्सेप्ट का अच्छा उदाहरण है, और इंटेलीज आईडीईए वर्कबेन्च के लिए एडवांस बिल्डिंग टूल एडवांस।

क्लाइंट और सर्वर के लिए कोर कक्षाएं आम हैं।

https://github.com/ghik/akkdroid

आईडीईए और एंड्रॉयड-प्लगइन के लिए अच्छा ट्यूटोरियल: http://fxthomas.github.io/android-plugin/


3

Android पर स्काला के साथ सबसे बड़ा मुद्दा संकलन समय है।

संभवतः इसलिए कि ड्यूल क्वाड कोर (8-सीपीयू) E5450 Xeon पर 8GB के साथ IDEA13 / Scala प्लगइन के साथ प्रॉपगार्ड क्लास स्ट्रिपिंग संकलन में दो मिनट या उससे अधिक समय लग सकता है।

मैं बस एक बार जर्दा स्काला एंड्रॉइड प्रोजेक्ट को पूरा करने के बाद जावा में वापस चला गया क्योंकि संकलन समय बहुत निराशाजनक था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.