2012-11-28 39 views
7

Đối với một dự án dài hạn dành cho sinh viên, tôi đang cố gắng phát triển một ứng dụng mô-đun với các plugin. Cụ thể, chúng tôi sẽ có:Hệ thống plugin với DexClassLoader() và giao diện người dùng

  • Ứng dụng chính mà chúng tôi có thể tìm kiếm, cập nhật, xóa và chạy plugin. Ứng dụng tổng thể này cũng sẽ lưu trữ một số dữ liệu từ các plugin.

  • Một số plugin được tải xuống từ máy chủ HTTP có mã và thành phần GUI.

Hiện tại, tôi có ứng dụng chính có thể tải xuống tệp .apk từ HTTP và tạo một phiên bản mới từ một lớp được xác định trong tệp .apk này. Tôi sử dụng cách mô tả ở đây: http://android-developers.blogspot.fr/2011/07/custom-class-loading-in-dalvik.html với phương thức DexClassLoader().

Nhưng tôi không thể xem cách hiển thị bố cục (hoặc bất kỳ thành phần GUI nào khác) được lưu trữ dưới dạng tài nguyên trong tệp .apk của plugin. Ví dụ, tôi đã cố gắng nhưng không thành công để tạo ra một Intent từ các ứng dụng tổng thể bằng cách sử dụng các classname plugin:

DexClassLoader cl = new DexClassLoader(...); 
Class<?> libClass = cl.loadClass("plugin_classname"); 
Intent intent = new Intent(this.getApplicationContext(), libClass); 
startActivity(intent); 

Và điều này không làm việc vì mục đích? Không được khai báo trong AndroidManifest.xml của ứng dụng chủ. Điều này cũng được mô tả trong chủ đề khác: Android- Using DexClassLoader to load apk file

Điều đó có nghĩa là hoàn toàn không có cách nào để xây dựng giao diện người dùng "động" như vậy? Nói chung, loại hệ thống plugin này có thể được thực hiện trên Android không? Tôi có nên thử một phương pháp khác không?

+1

thay vì làm cho Hoạt động động, luôn sử dụng cùng hoạt động và sử dụng DexClassLoader để tải một mảnh thay thế. – schwiz

+0

Bạn đã xây dựng bạn như thế nào 'plugin.jar'. Bình thực hiện giao diện? Tôi có một cái bình được xây dựng bởi nhật thực với mục 'classes.dex' nhưng' loadClass' luôn ném một ngoại lệ. – TheRealChx101

Trả lời

0

Tôi đã từng thử một điều tương tự và thấy điều đó là không thể. Nếu cơ chế cơ bản đã không được thay đổi kể từ đó (tháng 1 năm 2011), nó vẫn không thể. Chi tiết kỹ thuật được mô tả trong blog của tôi bằng cả tiếng Nhật và tiếng Anh.

Blog: động thêm Hoạt động mà không được khai báo trong AndroidManifest.xml (bất khả thi)
http://darutk-oboegaki.blogspot.jp/2011/01/androidmanifestxml-activity.html

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