Scala Programming สำหรับ Android


258

ฉันได้ติดตามการสอนที่Scala และ Androidด้วยScala 2.7.3ขั้นสุดท้าย แอพ Android ที่เกิดขึ้นใช้งานได้แม้กระทั่งแอพพลิเคชั่นพื้นฐานส่วนใหญ่ใช้เวลาหลายนาทีในการรวบรวมและต้องการบีบอัด900 kbซึ่งเป็นตัวหยุดการแสดงสำหรับแอปพลิเคชันมือถือ นอกจากนี้ IDE มีหน่วยความจำไม่เพียงพอทุกขณะ ผมถือว่าไม่ได้ทำสำหรับห้องสมุดขนาดใหญ่เช่นdexscala-library

  • ดังนั้นคำถามของฉันคือ: มีใครทำสิ่งนี้จริง ๆ และมีวิธีแก้ไหม?

คำตอบ:


128

ฉันได้เขียนแอพพลิเคชั่นพื้นฐานของ Android ใน Scala แล้วไม่มีอะไรที่ยอดเยี่ยม ไม่ใช่การเป็นโปรแกรมเมอร์ Java ที่ฉันแนะนำให้ใช้ "treeshake" ฉันได้รับการอธิบายจากเพื่อนว่านี่เป็นการแยกไลบรารีที่ไม่จำเป็นทั้งหมดออกจากไฟล์jar

ฉันยังไม่ได้บันทึก แต่ฉันพบว่ามีคนอื่นอยู่แล้ว:

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

Proguard ไม่ใช่ทางออกเดียวคุณอาจพบบางสิ่งที่เหมาะสมกับขั้นตอนการทำงานของคุณหรือเหมาะกับสภาพแวดล้อมของคุณมากขึ้น

นอกจากนี้ google เพิ่งรู้แจ็คซึ่งเกี่ยวข้องกับการลดเวลาสร้างและหน่วยความจำค่อนข้างมากดูhttps://source.android.com/source/jack.html


3
ขอบคุณ! ฉันจะต้องลองดู ผมสงสัยว่ามันสามารถนำมาใช้กับคราส (โดยใช้ Scala และ Android ปลั๊กอิน)
เลม

36
เลมมี่ - มีเหตุผลใดที่คุณไม่ยอมรับคำตอบนี้หรือไม่? บางทีคุณอาจพบทางออกที่ดีกว่า
Bostone

3
จากประสบการณ์ของฉัน treeshake ไม่ดีพอสำหรับรหัสสกาล่าที่ไม่สำคัญที่สุด มันแค่ไม่ก้าวร้าวมากพอ
James Moore

45

ตอนนี้คุณสามารถใช้ปลั๊กอิน Android สำหรับ Gradle เพื่อสร้างแอปพลิเคชัน Android ใน Scala มันรวมเครื่องมือ ProGuard เพื่อตัดแต่งไขมันจากไฟล์ APK ที่ได้ดังนั้นจึงดูเหมือนว่าจะตอบสนองความต้องการของคุณ

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


ใช้งานได้ดี! ไม่มีวิธีแก้ไขปัญหาใดที่ฉันได้ลองใช้งานมาแล้ว แต่ปลั๊กอิน Gradle ของคุณให้ข้อเสนอแนะที่เป็นประโยชน์แก่ฉันดังนั้นฉันจึงสามารถแก้ไขสิ่งที่เกิดขึ้นได้อย่างง่ายดาย
Mendelt

เจสันคุณยังทำงานเกี่ยวกับสิ่งนี้หรือไม่? ความมุ่งมั่นครั้งล่าสุดเมื่อ 9 เดือนที่แล้วและเกรดได้รับการกระแทกรุ่นตั้งแต่นั้นมา
ปีเตอร์ Ajtai

Peter การพัฒนาหยุดชะงักเนื่องจากความจริงที่ว่า Gradle ปัจจุบันเป็นระบบบิลด์สำหรับ Android
Jason Voegele

22

นอกจากนี้ยังมีปลั๊กอินสำหรับสร้าง Scala ตามSBT : SBT-หุ่นยนต์ปลั๊กอิน


1
ปลั๊กอินนี้เข้ากันไม่ได้กับ SBT รุ่นใหม่ล่าสุด คุณยังคงดูแลปลั๊กอินนี้อยู่หรือไม่? ปลั๊กอิน SBT ว่าคือเข้ากันได้กับรุ่นใหม่ล่าสุดของนี้หุ่นยนต์ SDK ปลั๊กอิน
DCKing


15

ฉันตรวจสอบวิธีแก้ไขปัญหาโดยละเอียดด้วย Eclipse 3.7, Scala 2.10 และปลั๊กอิน AndroidProguardScala v50:

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

ทุกอย่างทำงานได้ดี แอปพลิเคชันทดสอบอย่างง่ายพร้อมคลาสกิจกรรมหลักแบบ scalafied ใช้เวลาเพียง 38Kb สนับสนุนโครงการห้องสมุด Proguard เปิดใช้งานเมื่อส่งออกโครงการ


3
มันฟังดูยอดเยี่ยม วิธีสร้างเวลาด้วยโซลูชันนี้เมื่อปรับใช้กับอุปกรณ์ (เปรียบเทียบกับการปรับใช้โครงการ Java Android ที่เปรียบเทียบได้)?
evilcandybag

1
เวลาบิลด์ประมาณ 10 วินาทีเมื่อปรับใช้กับอุปกรณ์ ฉันหวังว่าสักวันมันจะเร็วขึ้น
Mikaël Mayer

6
ใช้เวลาประมาณ 1 วินาทีในขณะนี้กับ android sdk และปลั๊กอินล่าสุดเนื่องจากการใช้แคชที่ดีใหม่
Mikaël Mayer

7

การพัฒนาแอพ Android สำหรับ Scala กำลังพัฒนาอย่างต่อเนื่อง วิธีที่ดีที่สุดในปัจจุบันในการทำให้ดูเหมือนว่า SBT ร่วมกับandroid-sdk-pluginซึ่งได้รับการดูแล * และทำงานได้ดีสำหรับฉันในโครงการ Scala / Android ของฉัน ตัวอย่างล่าสุดที่แสดงให้เห็นถึงการใช้ปลั๊กอินนี้กับ Scaloid ที่กล่าวถึงแล้วยังสามารถพบได้

โปรดทราบว่าคำถามนี้เป็นตัวอย่างทั่วไปของคำถามที่มีคำตอบที่ล้าสมัยใน Stack Overflow คำตอบนี้น่าจะล้าสมัยในบางจุดเช่นกัน

* โปรเจ็กต์ที่ใช้ SBT อื่น ๆ ที่กล่าวถึงในชุดคำตอบนี้ดูเหมือนจะไม่ได้เขียนโค้ดสำหรับพวกเขาในช่วงหกเดือนที่ผ่านมาในขณะที่เขียน อาจมีปัญหาความเข้ากันได้กับ Scala และ SBT เวอร์ชันใหม่


6

หากคุณใช้ Maven ให้ใช้android-scala-testเป็นเทมเพลตเริ่มต้น มันใช้งานได้ดีสำหรับฉันออกจากกล่อง

Scaloidเป็น wrapper Android API ที่เขียนใน Scala ที่ช่วยให้คุณเขียนโปรแกรม Android ของคุณในแบบ Scala


4

คุณสามารถใช้ Scala บน Android โดยไม่มี SBT มันสร้างขึ้นจากภายนอกโดย Gradle เพื่อสร้างแอปพลิเคชัน Android https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle เป็นเครื่องมือสร้างดั้งเดิมสำหรับ Android มากกว่า SBT

มีตัวอย่างที่ดีของแนวคิดไคลเอนต์ Scala และโซลูชันฝั่งเซิร์ฟเวอร์และเครื่องมือสร้าง gradle เป็นล่วงหน้าสำหรับ IntelliJ IDEA workbench

ล่วงหน้าใหญ่ว่าคลาสหลักเป็นเรื่องปกติสำหรับไคลเอนต์และเซิร์ฟเวอร์

https://github.com/ghik/akkdroid

บทแนะนำที่ดีสำหรับ IDEA และ android-plugin: http://fxthomas.github.io/android-plugin/


3

ปัญหาที่ใหญ่ที่สุดของ Scala บน Android คือช่วงเวลารวบรวม

อาจเป็นเพราะการลอกคลาส Proguard กับปลั๊กอิน IDEA13 / Scala บน Dual Quad Core (8-CPU) E5450 Xeon กับ 8GB สามารถใช้เวลาสองนาทีหรือมากกว่า

ฉันเพิ่งย้ายกลับไปที่ Java หลังจากเสร็จสิ้นโครงการ Scala Android ที่ยอดเยี่ยมเนื่องจากเวลาในการรวบรวมนั้นน่าหงุดหงิดเกินไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.