2009-01-24 37 views
245

Tôi đã làm theo hướng dẫn tại Scala and Android với số Scala 2.7.3 final. Ứng dụng Android kết quả hoạt động nhưng ngay cả ứng dụng cơ bản nhất cũng mất vài phút (!) Để biên dịch và cần 900 kb được nén, là nút hiển thị cho các ứng dụng dành cho thiết bị di động. Ngoài ra, IDE hết bộ nhớ ngay bây giờ và sau đó. Tôi giả định dex không được thực hiện cho các thư viện lớn như scala-library.Lập trình Scala cho Android

  • Vì vậy, câu hỏi của tôi là: Có ai thực sự thực hiện việc này và liệu có cách nào để giải quyết vấn đề này không?

Trả lời

125

Tôi đã viết một số ứng dụng Android cơ bản trong Scala, không có gì quá hoành tráng. Không phải là một lập trình viên Java, tôi đã được đề nghị sử dụng một "treeshake", tôi đã được giải thích bởi một người bạn rằng điều này loại bỏ tất cả các thư viện không cần thiết từ các tệp jar.

Tôi đã không ghi nhận điều đó, nhưng tôi thấy rằng người nào khác đã có:

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

Proguard không phải là giải pháp duy nhất, bạn có thể tìm thấy một cái gì đó phù hợp với dòng chảy công việc của bạn hoặc là phù hợp hơn cho bạn môi trường.

Ngoài ra google đã chỉ nhận ra JACK, trong đó giao dịch với khá nhiều giảm xây dựng và thời gian bộ nhớ thấy https://source.android.com/source/jack.html

+3

Cảm ơn bạn! Tôi sẽ phải thử điều đó. Tôi tự hỏi nếu nó có thể được sử dụng với Eclipse (bằng cách sử dụng Scala và Android Plugins) – Lemmy

+34

Lemmy - là có bất kỳ lý do bạn không chấp nhận câu trả lời này? Có lẽ bạn tìm thấy một giải pháp tốt hơn? – Bostone

+0

Liên kết lại hoạt động trở lại – Markus

43

Bây giờ bạn có thể sử dụng các plugin Android cho Gradle để tạo ra các ứng dụng Android tại Scala. Nó kết hợp các công cụ ProGuard để cắt giảm chất béo từ tập tin APK kết quả, do đó, dường như để đáp ứng nhu cầu của bạn.

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

+0

Hoạt động tuyệt vời! Không có giải pháp nào tôi đã thử làm việc ngoài hộp nhưng plugin Gradle của bạn đã cho tôi phản hồi hữu ích để tôi có thể dễ dàng khắc phục những gì đã xảy ra. – Mendelt

+0

Jason, bạn vẫn đang làm việc về điều này? Cam kết cuối cùng là 9 tháng trước và cấp lớp đã bị đụng phải các phiên bản kể từ đó. –

+0

Peter, phát triển đã tạm dừng do thực tế là Gradle bây giờ là hệ thống xây dựng bản địa cho Android. –

21

Ngoài ra còn có một plugin cho những người xây dựng Scala dựa trên sbt: sbt-android-plugin.

+1

Plugin này không tương thích với các phiên bản SBT mới nhất. Bạn vẫn đang duy trì plugin này? Plugin SBT * tương thích với phiên bản mới nhất của [android-sdk-plugin] (https://github.com/pfn/android-sdk-plugin). – DCKing

13

tôi xác nhận giải pháp chi tiết này với Eclipse 3.7, Scala 2.10 và các plug-in AndroidProguardScala V50:

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

Mọi thứ đều hoạt động tốt. Một ứng dụng thử nghiệm đơn giản với lớp hoạt động chính scalafied chỉ mất 38Kb. Các dự án thư viện được hỗ trợ. Proguard được kích hoạt khi xuất dự án.

+3

Điều này thật tuyệt vời. Làm thế nào là thời gian xây dựng với giải pháp này khi triển khai cho một thiết bị (so với việc triển khai một dự án Java Android có thể so sánh)? – evilcandybag

+1

Thời gian xây dựng là khoảng 10 giây khi triển khai thiết bị. Tôi hy vọng nó sẽ nhanh hơn vào một ngày nào đó. –

+5

Mất khoảng 1 giây với sdk và plug-in android mới nhất, vì một số cài đặt bộ nhớ cache tốt mới. –

6

Nếu bạn sử dụng maven, hãy sử dụng android-scala-test làm mẫu khởi động. Nó hoạt động tuyệt vời cho tôi ra khỏi hộp.

Scaloid là trình bao bọc API Android được viết bằng Scala giúp bạn viết chương trình Android theo phong cách Scala.

4

Bạn có thể sử dụng Scala trên Android mà không cần SBT, nó được xây dựng bên ngoài bởi Gradle để tạo ứng dụng Android. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle là công cụ xây dựng bản địa hơn cho Android hơn SBT.

Có ví dụ điển hình về khái niệm giải pháp phía máy khách và máy chủ Scala và công cụ xây dựng gradle như trước cho bàn làm việc IntelliJ IDEA.

Lớn trước rằng các lớp lõi là phổ biến cho khách hàng và máy chủ.

https://github.com/ghik/akkdroid

tốt hướng dẫn cho IDEA và android-plugin: http://fxthomas.github.io/android-plugin/

6

Phát triển ứng dụng Android cho Scala được liên tục phát triển. Cách tốt nhất hiện tại để làm điều đó xuất hiện với SBT kết hợp với android-sdk-plugin, được duy trì * và hoạt động tốt cho tôi trong dự án Scala/Android của tôi. Một ví dụ gần đây thể hiện việc sử dụng plugin này với Scaloid đã đề cập có thể also be found.

Xin lưu ý rằng câu hỏi này là một ví dụ điển hình về số question with outdated answers trên Stack Overflow. Câu trả lời này có thể sẽ trở nên lỗi thời tại một số điểm là tốt.

* Các dự án dựa trên SBT khác được đề cập trong chuỗi trả lời này dường như không có mã được viết cho chúng trong sáu tháng qua tại thời điểm viết. Họ có thể có vấn đề tương thích với các phiên bản mới hơn của Scala và SBT.

2

Vấn đề lớn nhất với Scala trên Android là thời gian biên dịch.

Có thể vì lớp Proguard tước biên dịch với IDEA13/Scala plugin trên Dual Quad Core (8-CPU) E5450 Xeon với 8GB có thể mất hai phút trở lên.

Tôi chỉ đơn giản là chuyển về Java sau khi hoàn thành một dự án Scala Android lớn lao khi thời gian biên dịch quá bực bội.

Các vấn đề liên quan