2010-10-11 21 views

Trả lời

26

Làm việc với Scala hầu như không gây đau đớn, vì trình biên dịch dex chỉ hoạt động với bytecode - đó chính xác là những gì Scala tạo ra.

Vấn đề lớn nhất của bạn sau đó là phụ thuộc vào thư viện scala, vì dex hy vọng mọi thứ sẽ nằm trong một Jar đơn lẻ. Điều này được xử lý tốt nhất với Proguard (cũng sẽ loại bỏ mã không sử dụng và cung cấp cho bạn một tệp nhỏ hơn, lý tưởng cho thiết bị di động)


Thực tiễn tốt nhất hiện nay là sử dụng SBT với plugin Android; Nó sẽ chăm sóc mọi thứ cho bạn: http://github.com/jberkel/android-plugin

Nếu bạn phải sử dụng Eclipse và plugin do Google cung cấp, thì bạn sẽ có cấu trúc thư mục không chuẩn. Tôi cũng đã viết một bài viết về cách đối phó với điều này: http://www.assembla.com/wiki/show/scala-ide/Developing_for_Android

Nhưng được cảnh báo ... cần nhiều nỗ lực hơn theo cách đó!

+3

Vấn đề chính là phản ánh sử dụng thư viện đó (giống như myClass.getMethod()), vì proguard không thể phát hiện chúng, bạn cần khai báo để giữ cho các lớp/chức năng đó theo cách thủ công. Và một số thư viện chỉ khó làm cho nó hoạt động với Scala/Proguard/Android, ví dụ. gdata-java-client. Hoặc bạn cần một số tinh chỉnh để giữ các tập tin cenrtain sau khi quá trình proguard JAR, ví dụ. ical4j. Nếu không, các thư viện thường có thể làm việc với sự kết hợp này rất dễ dàng. –

+0

Điều này đúng! Hãy cảnh giác với sự phản ánh ... –

5

Chúng tôi đã thảo luận điều này tại Scala Lift Off London Thứ Sáu tuần trước và sự đồng thuận dường như là nó thường hoạt động tốt miễn là bạn tránh Diễn viên. Ngoài ra, các sbt-android-plugin là rất khuyến khích. Blog của Nathan Hamblen có many posts on Android và những blog còn được gắn thẻ Scala có rất nhiều thứ đáng để xem.

+0

http://code.technically.us/post/824974287/rewiring-android-for-type-safe-layout-resources là một lợi thế tuyệt vời (nếu nhỏ) để lập trình cho Android ở Scala thay thế của Java. –

15

There is buổi nói chuyện của chàng trai đến từ bu.mp trên Scala Ngày 2011.

Disclaimer: Trong khi họ nói chuyện rất nhiều về vấn đề mà họ đã phải đối mặt, những kinh nghiệm tổng thể chắc chắn tích cực. Hơn nữa, đây là vấn đề của một nhóm cụ thể và họ là những người nhỏ tuổi.

Tóm tắt:

  • Sử dụng bộ nhớ. Đóng cửa ăn bộ nhớ. Scala đã đóng cửa khắp nơi. Trong khi nó không phải là một vấn đề lớn tương đối (bộ nhớ overheads) trên máy tính bảng của bạn, nó cần được xem xét khi bạn phát triển cho điện thoại di động. Bạn có thể hỏi: cách họ giải quyết nó? Họ đã có một cuộc săn lùng cho một vòng chặt chẽ và sau đó tối ưu hóa chúng (viết lại trong scala/java không giới hạn). (26 phút) Tôi nghĩ Java 8 với hỗ trợ đóng cửa tự nhiên sẽ giảm bớt vấn đề này Phiên bản scala tiếp theo sẽ nhắm mục tiêu nền tảng java 8 với chương trình phụ trợ mới và nhằm mục đích hiệu suất tốt hơn nhiều. Thảo luận về lộ trình is here.
  • Trình biên dịch chậm hơn (như Michal Galpin cho biết họ có 15 giây để biên dịch mã Java, khoảng một phút cho Scala và về đơn đặt hàng nhiều hơn cho Proguard, nhưng lưu ý rằng nó phụ thuộc vào cơ sở mã và máy móc của bạn, nhưng tôi nghi ngờ tỷ lệ sẽ giống nhau). Nó đặc biệt khó chịu khi bạn tạo giao diện người dùng, như di chuyển pixel, nút, v.v. và muốn xem nhanh kết quả. (7 phút)
  • Có một số vấn đề với các lớp bên trong khá phổ biến đối với Android (xem chi tiết 23:00).
  • hiếm lỗi trong scalac (scala compiler) trong scala-java-collections interop. Các vấn đề đã được giải quyết bằng cách viết những điều này một cách rõ ràng (tôi nghi ngờ rằng không phải là rất nhiều boilerplate ở tất cả).

Trong khi ông nói về IDE quá, tôi không nghĩ rằng đó là một vấn đề (xem this bưu điện, về Scala môi trường). Những người làm Scala IDE và IntelliJ làm tốt công việc của họ và hỗ trợ IDE ngày càng tốt hơn.

Để kiểm tra đơn vị người ta có thể sử dụng RoboSpecs (cho phép bạn chạy các kiểm tra đơn vị bên trong JVM, không phải bên trong trình mô phỏng), nhanh hơn.

Một trong những vấn đề lớn nhất mà tôi gặp phải là limitations của định dạng dex (không quá 65536 tham chiếu phương thức cho mỗi tệp dex). Thư viện Scala chỉ đơn giản là không phù hợp với giới hạn, do đó bạn phải giải quyết vấn đề đó bằng cách:

  • bằng cách sử dụng Proguard sẽ cắt chất béo khỏi lib lib. Nhưng nó thực sự là chậm trên máy tính xách tay của tôi, và chỉ lãng phí thời gian trong giai đoạn phát triển (nhưng rất hữu ích khi bạn phát hành ứng dụng của mình lên Google Play)
  • sử dụng predexed library. Điều xấu là dự án này là một chút bị bỏ rơi và chỉ chứa phiên bản 2.9.0-1.
  • preinstalling scala trên điện thoại của bạn

Một số kẻ tuyên bố rằng có những vấn đề với IDE, nhưng mọi thứ bị thay đổi nhanh chóng: phiên bản hiện tại của IDEA IntelliJ 12 không chỉ có một sự hỗ trợ tốt của Scala như một plugin, nhưng cũng chứa UI Designer cho Android. Hơn nữa, bạn có thể sử dụng Eclipse có hỗ trợ từ cả hai bên Android (bởi Google) và Scala (by Typesafe). Android Studio (IDE mới dựa trên IDEA đã được công bố trên Google IO '13 và được phát triển bởi Google) hỗ trợ plugin IDEA do đó Scala.

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