Tôi đang cố gắng thực hiện điều gì đó tương tự với số stackoverflow posting này. Những gì tôi muốn làm là đọc định nghĩa của một hoạt động hoặc dịch vụ từ thẻ SD. Để tránh các vấn đề về quyền hiển thị, tôi tạo phiên bản shell của hoạt động này trong tệp .apk, nhưng cố gắng thay thế phiên bản đó bằng hoạt động cùng tên nằm trên thẻ SD vào thời gian chạy. Thật không may, tôi có thể tải định nghĩa lớp hoạt động từ thẻ SD bằng DexClassLoader, nhưng định nghĩa lớp gốc là định nghĩa được thực hiện. Có cách nào để xác định rằng định nghĩa lớp mới thay thế định dạng cũ hoặc bất kỳ đề xuất nào về tránh các vấn đề về quyền hiển thị mà không thực sự cung cấp hoạt động cần thiết trong gói? Các mẫu mã:Android, cách sử dụng DexClassLoader để thay thế động Hoạt động hoặc Dịch vụ
ClassLoader cl = new DexClassLoader("/sdcard/mypath/My.apk",
getFilesDir().getAbsolutePath(),
null,
MainActivity.class.getClassLoader());
try {
Class<?> c = cl.loadClass("com.android.my.path.to.a.loaded.activity");
Intent i = new Intent(getBaseContext(), c);
startActivity(i);
}
catch (Exception e) {
Intead phát động com.android.my.path.to.a.loaded.activity
quy định tại /sdcard/mypath/My.apk
, nó sẽ khởi động các hoạt động tĩnh nạp vào dự án.
Tôi có cảm giác rằng điều này không thể được thực hiện đơn giản chỉ vì cách Android xử lý nội dung. Nếu bạn gọi startActivity trên một lớp trong một ứng dụng khác, nó sẽ phải tải trong thread của ứng dụng chứ không phải của riêng bạn, và do đó chỉ đơn giản là một thay thế nguy hiểm cho Intent của Android. – Tom