Tin tức iOS

IPA & Tweak

Husk – chạy ứng dụng Android APK trực tiếp trên iPhone

4 lượt xem0 đang xem

Husk – chạy ứng dụng Android APK trực tiếp trên iPhone
Mục lục bài viết13 nội dung

Husk là một dự án mã nguồn mở của Leviidev, hướng đến việc chạy các ứng dụng Android trực tiếp trên iPhone. Thay vì chuyển đổi APK thành IPA, Husk khởi chạy một môi trường Android ARM64 thông qua QEMU rồi hiển thị ứng dụng Android toàn màn hình bên trong ứng dụng iOS.

Theo mô tả chính thức của dự án, cách sử dụng được hướng tới khá đơn giản: đưa một file APK vào Husk, chọn ứng dụng và Android app sẽ được mở toàn màn hình.

1.Husk hoạt động như thế nào?

1.1Android thực sự chạy bên trong iPhone

Husk không cố gắng chạy trực tiếp mã Android trên iOS.

Thay vào đó, dự án khởi động một Android ARM64 guest thực sự bằng QEMU TCG ngay bên trong tiến trình của Husk.

Cấu trúc cơ bản gồm:

  • Husk → QEMU → Android ARM64 → APK

Sau khi Android khởi động, Husk lấy phần hình ảnh của ứng dụng Android và đưa nó lên màn hình iPhone, đồng thời chuyển thao tác cảm ứng từ iOS ngược vào Android.

1.2Không phải giả lập Android kiểu thông thường

Một điểm khá thú vị là Husk cố gắng che phần giao diện Android bên ngoài ứng dụng.

Thay vì cho người dùng nhìn thấy cả máy Android ảo với thanh trạng thái, launcher và các thành phần hệ thống khác, mục tiêu của Husk là chỉ hiển thị ứng dụng Android đang chạy ở chế độ toàn màn hình.

Điều này khiến trải nghiệm gần giống như đang mở một ứng dụng bình thường trên iPhone hơn là sử dụng một máy Android ảo.

2.Cài APK trực tiếp

2.1Import APK

Husk có hệ thống thư viện ứng dụng riêng.

Người dùng có thể đưa file .apk vào ứng dụng, sau đó Husk đọc thông tin từ APK để lấy:

  • Tên ứng dụng.
  • Icon.
  • Thông tin từ Android Manifest.
  • Resource của ứng dụng.

Các commit gần đây cũng đã bổ sung khả năng đọc trực tiếp tên và icon từ manifest/resource table của từng APK.

2.2Thư viện ứng dụng Android

Sau khi thêm APK, các ứng dụng sẽ xuất hiện trong thư viện của Husk tương tự một launcher.

Các phiên bản gần đây đã được thiết kế lại giao diện, bổ sung trình duyệt file, trang thông tin ứng dụng, khả năng gỡ ứng dụng và nhiều thiết lập hơn.

3.Husk cần JIT

3.1Vì sao phải bật JIT?

QEMU sử dụng TCG – Tiny Code Generator để chuyển đổi mã máy của Android guest thành mã có thể chạy trên CPU của iPhone.

Quá trình này cần vùng bộ nhớ vừa có khả năng ghi mã vừa có khả năng thực thi.

Trên iOS, ứng dụng thông thường không được tự do cấp quyền thực thi cho vùng bộ nhớ như vậy. Chính giao diện Husk cũng ghi rõ rằng nếu không có vùng executable memory thì QEMU không thể dịch ngay cả một instruction.

3.2Sử dụng StikDebug

Husk sử dụng StikDebug làm debugger để hỗ trợ cấp vùng nhớ cần thiết cho JIT.

Theo kiến trúc của dự án, Husk yêu cầu một vùng RX từ StikDebug, sau đó tạo một alias RW bằng vm_remap. QEMU sử dụng hai vùng này cho cơ chế split-W^X của TCG.

Trên iOS 27, nhóm phát triển cho biết bài kiểm tra JIT đã chạy thành công trên thiết bị thật, trong đó vùng JIT 256 MB được cấp và mã được tạo động có thể thực thi thành công.

4.Hiệu năng sẽ không giống chạy Android native

Dù cả Android guest và iPhone hiện đại đều sử dụng kiến trúc ARM64, Husk vẫn không thể chạy mã Android trực tiếp trên CPU theo kiểu native.

QEMU TCG vẫn phải xử lý:

  • Guest ARM64 → TCG IR → Host ARM64

đồng thời giả lập MMU và nhiều phần cứng của máy Android.

Chính tài liệu của Husk cũng lưu ý rằng ARM64 chạy trên ARM64 không có nghĩa là hiệu năng gần native; TCG vẫn tạo ra mức suy giảm hiệu năng đáng kể.

Vì vậy Husk hiện phù hợp với mục đích thử nghiệm và nghiên cứu hơn là kỳ vọng mọi game hoặc ứng dụng Android nặng sẽ chạy giống trên smartphone Android thật.

5.Hiển thị và cảm ứng

Husk lấy framebuffer từ Android guest thông qua API hiển thị của QEMU rồi đưa hình ảnh sang CAMetalLayer của iOS.

Ở chiều ngược lại, thao tác cảm ứng trên iPhone được chuyển thành tọa độ input cho thiết bị virtio-tablet bên trong QEMU.

Điều này cho phép người dùng tương tác với ứng dụng Android bằng màn hình cảm ứng của iPhone.

6.Không thể phát hành trên App Store

Husk được phát hành dưới giấy phép GPL-2.0-or-later và liên kết với QEMU GPLv2.

Ngoài vấn đề giấy phép, Husk còn cần entitlement get-task-allow cùng việc debugger attach vào ứng dụng trong lúc chạy để cung cấp JIT.

Vì những lý do này, nhà phát triển cho biết Husk không thể được phân phối thông thường qua App Store và sẽ cần cài đặt theo hình thức sideload.

7.Dự án vẫn đang được phát triển

Husk là một ý tưởng khá đặc biệt: thay vì chỉ chạy Linux hoặc Android trong một cửa sổ máy ảo, dự án muốn biến Android thành một lớp chạy ứng dụng APK gần giống launcher trên iOS.

Tuy nhiên, tài liệu kiến trúc trong repo cũng lưu ý một số phần của pipeline QEMU/Android từng vẫn đang trong quá trình kiểm chứng trên thiết bị thật. Vì vậy khả năng tương thích sẽ phụ thuộc APK, phiên bản Husk và trạng thái phát triển hiện tại của dự án.

Repo:
https://github.com/Leviidev/Husk

CỘNG ĐỒNG

Thảo luận bài viết

Chưa có bình luận. Hãy là người đầu tiên chia sẻ.