2011-12-06 44 views
9

Tôi hiện đang sử dụng Monodroid để phát triển một ứng dụng Android. Tôi khá mới đối với các ứng dụng điện thoại nên tôi bối rối về một vài điều sau:C# .dll trong ứng dụng Android

  1. Định nghĩa nào là thư viện android? Tôi sử dụng mẫu Mono để tạo thư viện android: Tạo một Mono cho Android Class Library => viết mã và xây dựng thành .dll => chạy với trình mô phỏng từ Visual Studio và nó hoạt động tốt trong trình mô phỏng. Nhưng tệp .dll có phải là thư viện android không? Hoặc nó được chuyển đổi bởi Mono trước khi làm việc trên giả lập và thư viện android 'REAL' nên là JAR?

  2. Tôi có thể trực tiếp sử dụng .dll đã xác định của mình được viết bằng C# để tạo ứng dụng này không? Tôi đã thử nó trong Mono bằng cách tham chiếu trực tiếp nó trong ứng dụng Android của tôi và nó được xây dựng, không có lỗi. Nhưng khi giả lập chạy ứng dụng này, nó bị mắc kẹt (vẫn không có lỗi) - cách đúng để sử dụng C# .dll trong dự án ứng dụng Android là gì?

Tôi nhận ra có khá một vài chủ đề thảo luận về mối liên hệ giữa C# và android và khoảng mono nhưng sau khi đọc tôi vẫn không thể có được xung quanh với thư viện này tham khảo vấn đề vì vậy nếu ai có thể cung cấp bất kỳ gợi ý/ý nghĩ sẽ là nhất đánh giá cao

Trả lời

3
  1. DLL được tạo được biên dịch theo số Mono for Android profile, dựa trên Moonlight (triển khai Silverlight của Mono). Khi chạy, mã .NET được chạy trực tiếp với thời gian chạy Mono chạy như part of your application. Khi mã .NET phân lớp một thứ gì đó từ phía Java (ví dụ: Java.Lang.Object), Mono cho Android tạo ra callable wrappers để xử lý thông tin liên lạc giữa các thời gian chạy.
  2. Về mặt kỹ thuật, bạn có thể sử dụng một tệp DLL .NET thông thường trong ứng dụng Mono dành cho Android của mình, nhưng tôi không khuyên bạn nên sử dụng nó. Tiểu sử được hiển thị bởi Mono cho Android nhỏ hơn nhiều so với khung công tác .NET đầy đủ (và thậm chí không hoàn toàn tương đương với khung công tác của Silverlight), vì vậy nếu DLL của bạn tham chiếu một phương thức không được tìm thấy trong Mono cho Android, ứng dụng sẽ bị lỗi. Thay vào đó, tôi khuyên bạn nên tạo một thư viện lớp riêng cho ứng dụng của bạn và chia sẻ các tệp nguồn trên các dự án bằng cách sử dụng liên kết tệp. My blog post here chứa một ví dụ về cách thực hiện điều đó.
+0

Cảm ơn câu trả lời của bạn tại đây! Vì vậy, kể từ khi mã NET được chạy với thời gian chạy Mono không có nghĩa là, dll chỉ có thể được sử dụng cho các ứng dụng Android, cung cấp cài đặt Monodroid SDK? Bởi vì mục tiêu chính của tôi không phải là ứng dụng nhưng để chuyển một số thư viện C# sang thư viện android và cung cấp cho các nhà phát triển Android .. trong trường hợp đó, điều đó có nghĩa là ngay cả khi tôi đã tạo thành công dll tương thích với android, họ vẫn yêu cầu Monodroid để thực hiện thời gian chạy gói? – lynnyilu

+0

Đúng vậy - một DLL được biên dịch bằng Mono cho Android sẽ chỉ hữu ích cho các ứng dụng được xây dựng bằng Mono dành cho Android. –

+0

Nếu bạn muốn cung cấp một thư viện cho các nhà phát triển thì bạn nên có một dll được biên dịch cho nền tảng đó. Miễn là bạn chỉ sử dụng các lớp được hỗ trợ mà bạn có thể hỗ trợ nhiều nền tảng. Về lý thuyết ** Math.Round ** sẽ hoạt động giống nhau trên tất cả các nền tảng. Điều này giả định rằng việc thực hiện Mono phù hợp với việc thực thi Microsoft .NET cho tất cả các đầu vào (nó có khả năng kiểm tra bởi vì chúng đã kiểm tra đơn vị trên nó). –

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