Lập trình Scala cho Android


258

Tôi đã làm theo hướng dẫn tại Scala và Android với Scala 2.7.3 cuối cùng. Ứ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 nén 900 kb , đây là công cụ chặn hiển thị cho các ứng dụng di động. Ngoài ra, IDE hết bộ nhớ mỗi giờ và sau đó. Tôi cho rằng dexkhông được thực hiện cho các thư viện lớn như scala-library.

  • Vì vậy, câu hỏi của tôi là: Có ai thực sự làm điều này và có cách nào chữa trị cho điều này?

Câu trả lời:


128

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 "treeshake", tôi được một người bạn giải thích rằng điều này loại bỏ tất cả các thư viện không cần thiết khỏi các tệp jar .

Tôi chưa ghi nhận nó, nhưng tôi thấy rằng người 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 thứ gì đó phù hợp với quy trình làm việc của bạn hoặc phù hợp hơn với môi trường của bạn.

Ngoài ra, google vừa nhận ra JACK, liên quan đến việc giảm thời gian xây dựng và bộ nhớ khá nhiều, hãy xem https://source.android.com/source/jack.html


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

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

3
Theo kinh nghiệm của tôi, treeshake không đủ tốt cho hầu hết các mã scala không cần thiết. Nó chỉ không đủ áp lực.
James Moore

45

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

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


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ì đang xảy ra.
Mendelt

Jason, bạn vẫn còn làm việc này? Cam kết cuối cùng là 9 tháng trước và lớp đã bị các phiên bản bị lỗi kể từ đó.
Peter Ajtai

Peter, sự phát triển đã bị dừng lại do thực tế rằng Gradle hiện là hệ thống xây dựng riêng cho Android.
Jason Voegele

22

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


1
Plugin này không tương thích với các phiên bản mới nhất của SBT. Bạn vẫn đang duy trì plugin này? Một plugin SBT đó tương thích với các phiên bản mới nhất của này -sdk-plugin android .
DCKing


15

Tôi đã xác minh giải pháp chi tiết này với Eclipse 3.7, Scala 2.10 và trình cắm thêm 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 được mở rộng chỉ mất 38Kb. Dự án thư viện được hỗ trợ. Proguard được kích hoạt khi xuất dự án.


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

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

6
Phải mất khoảng 1 giây với trình cắm và sdk Android mới nhất, do một số triển khai bộ đệm tốt mới.
Mikaël Mayer

7

Phát triển ứng dụng Android cho Scala đang tiếp 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 plugin android-sdk , được duy trì * và hoạt động tốt với tôi trong dự án Scala / Android của tôi. Một ví dụ gần đây chứng minh việc sử dụng plugin này với Scaloid đã được đề cập cũng có thể được tìm thấy .

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

* Các dự án dựa trên SBT khác được đề cập trong chuỗi câu 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.


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à một trình bao bọc API Android được viết bằng Scala giúp bạn viết chương trình Android của mình theo kiểu Scala.


4

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

Gradle là công cụ xây dựng riêng cho Android hơn SBT.

Có một 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 lớp dưới dạng nâng cao cho bàn làm việc của IntelliJ IDEA.

Tiến bộ lớn mà các lớp cốt lõi là phổ biến cho máy khách và máy chủ.

https://github.com/ghik/akkdroid

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


3

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

Có thể do lớp Proguard tước biên dịch với plugin IDEA13 / Scala 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à quay trở lại Java sau khi hoàn thành một dự án Scala Android lớn vì thời gian biên dịch quá bực bội.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.