Người dùng muốn trải nghiệm Android trên desktop có một vài hệ điều hành dựa trên Android – tuy nhiên nhiều trong số đó chỉ là fork của Android x86 (PrimeOS, Remix OS, Phoenix OS x86). Điều này vì Android x86 từng chậm phát triển, các dev khác tiếp tục phát triển.
Tuy nhiên, Android x86 gần đây cập nhật đều đặn, bao gồm cập nhật lên Android Oreo. Nếu muốn trải nghiệm Android tốt trên desktop, hãy thử Android x86 trước các fork khác (Remix OS đã ngừng phát triển hoàn toàn).
Yêu cầu:
- Android x86 ISO
- UNetbootin
Trên Ubuntu: sudo apt-get install unetbootin
Trên Arch Linux: pacman -S unetbootin
Cài đặt qua USB Flash Drive
- Mở UNetbootin, trỏ đến file Android x86 ISO.
- Chọn "USB Drive", nhấn OK.
- UNetbootin copy Android x86 vào USB, biến thành portable installer.
- Hoàn tất, reboot máy, vào BIOS menu.
- Tìm trang cho phép boot trực tiếp đến media cụ thể (HDD, CD, USB...).
- Chọn boot trực tiếp đến USB flash drive.
- Menu GRUB xuất hiện, chọn cài Android x86 lên ổ cứng.
- Chọn partition cài đặt – nếu không chắc, đừng format partition. Cũng đừng ghi đè partition OS khác.
- Hỏi cài GRUB: Nếu chủ yếu dùng Windows, không có Linux khác, chọn Yes. Nếu đã có Linux/GRUB, cài đè là ý tưởng tồi.
- Hỏi "Make system R/W". Chọn yes. Sẽ "root" Android x86 và bật read-write cho partition /system.
- Reboot, tận hưởng Android x86 mới cài.
Cài đặt qua CD/DVD
Quy trình gần như giống hệt, chỉ khác là burn bootable CD từ Android x86 ISO. Có nhiều ISO burner, có thể dùng Free ISO Burner.
Cài đặt lên Virtual Machine
- Cấu hình VM tối thiểu 512 MB RAM, với Android x86 base Oreo mới nên cao hơn.
- Load file ISO Android x86 vào VM menu, chạy VM.
- Menu GRUB hiện ra, chọn cài Android x86 lên ổ cứng.
- Tạo partition mới, cài Android x86 vào. Format partition sang định dạng hỗ trợ: ext3, ext2, ntfs, fat32. Lưu ý chọn fat32 sẽ cảnh báo không lưu data được – Android x86 chạy như live CD (không lưu data khi dùng).
- Chọn "Yes" khi hỏi cài bootloader GRUB, cho phép make system R/W để bật root.
- Reboot khi xong.
Thêm Android x86 vào menu GRUB
Cài GRUB Customizer trước, sẽ dễ dàng hơn.
sudo add-apt-repository ppa:danielrichter2007/grub-customizer sudo apt-get update sudo apt-get install grub-customizer
Mở GRUB Customizer, thêm entry GRUB mới.
Click tab 'Sources', nhập lệnh:
set root='(hd0,4)' search --no-floppy --fs-uuid --set=root e1f9de05-8d18-48aa-8f08-f0377f663de3 linux androidx86/kernel root=UUID=e1f9de05-8d18-48aa-8f08-f0377f663de3 quiet androidboot.hardware=generic_x86 SRC=/androidx86 acpi_sleep=s3_bios,s3_mode initrd androidx86/initrd.img
Các phần in đậm cần thay đổi:
- set root='(hd0,4)': Thay (hd0,4) thành partition cài Android x86. HD0 = SDA, HD1 = SDB... Số sau là partition number. hd0,4 = SDA4, nếu cài SDA6 thì hd0,6.
- --set=root e1f9de05-8d18-48aa-8f08-f0377f663de3: Chuỗi ngẫu nhiên là UUID partition cài Android x86. Thay bằng UUID đúng. Lấy UUID bằng cách tạo entry mới trong GRUB Customizer, vào tab Options, chọn 'Linux' từ dropdown.
- Trong dropdown partition, chọn partition của bạn, vào tab Source – sẽ hiển thị UUID.
- androidx86/: Root của Android x86. Thay bằng root thực tế, vào partition Android x86, sẽ thấy folder 'android' – đó là root cài đặt.
- androidboot.hardware: Thiết bị cụ thể. Phiên bản Android x86 cũ (như 4.03) dùng androidboot_hardware (dấu _ underscore, không phải . period). Không cần thiết cho phiên bản mới. Khi không set trong kernel cmdline, init process vẫn lấy đúng giá trị ro.hardware.
Danh sách hardware có thể dùng:
- generic_x86: Hardware không trong danh sách, dùng cái này
- eeepc: Laptop EEEPC
- asus_laptop: Laptop ASUS (chỉ ASUS được hỗ trợ)
Mẹo và thủ thuật cuối
Android x86 không dùng được Android Market, cần giải pháp thay thế cài app.
Bật unknown sources: Cài đặt > Ứng dụng > bật Unknown Sources, bỏ qua cảnh báo.
Bây giờ có thể tải cài APK từ ngoài Google Play. Một số store tốt:
- XDA Labs
- AndAppStore
- Aptoide
- APKMirror
Hiển thị giá trị pin chính xác
Android phát triển cho pin cụ thể, nên Android-based OS hiển thị sai giá trị pin trên hardware khác (như laptop). Để sửa, cần tweak một chút.
Trong Linux, app thu thập trạng thái pin qua sysfs, ở /sys/class/power_supply/. Các platform khác có layout thư mục khác, nhưng Android hardcode layout thành /sys/class/power_supply/. Để giải quyết, thêm entry mới trong vendor/asus/eeepc/system.prop, user đổi giá trị để cấu hình đúng sysfs layout cho platform khác nhau. Các entry:
ro.sys.fs.power_supply.ac=/AC0 ro.sys.fs.power_supply.bat=/BAT0 ro.sys.fs.power_supply.ac.feature.online=/online ro.sys.fs.power_supply.bat.feature.status=/status ro.sys.fs.power_supply.bat.feature.present=/present ro.sys.fs.power_supply.bat.feature.capacity.now=/charge_now ro.sys.fs.power_supply.bat.feature.capacity.full=/charge_full ro.sys.fs.power_supply.bat.feature.voltage.now=/voltage_now ro.sys.fs.power_supply.bat.feature.voltage.full=/voltage_full ro.sys.fs.power_supply.bat.feature.tech=/technology #ro.sys.fs.power_supply.bat.features.bat.health is not supported #ro.sys.fs.power_supply.bat.features.bat.temperature is not supported
Bản chất: Các entry nói cho Android battery service code tìm thông tin ở đúng chỗ.
Để implement code xử lý pin riêng, re-implement class IBatteryServiceStatus trong frameworks/base/libs/utils/IBatteryServiceStatus.cpp, thay thế frameworks/base/libs/utils/BatteryServiceStatus.cpp bằng implementation của bạn.
Đánh thức máy
Khác OS khác, không thể đánh thức từ sleep bằng di chuột hoặc phím ngẫu nhiên.
Chỉ dùng ESC, Menu, left, right, up, down để đánh thức. Giữ phím trên ít nhất 1 giây. Có thể bấm menu key khi keyguard hiện ra để unlock, hoặc dùng chuột cuộn trên keyguard để unlock.
Cách boot Android x86 trên đồ họa không hỗ trợ
Khi boot Live-CD, ở menu các tùy chọn boot, bấm Tab. Sẽ hiện boot prompt.
Sẽ thấy kiểu:
kernel initrd=/initrd.img root=/dev/ram0 androidboot_hardware=generic_x86 acpi_sleep=s3_bios,s3_mode video=-16 quiet SRC= DATA= DPI=240
Chỉnh dòng này: trước hết xóa "quiet" để thấy kernel message.
Thiết lập tham số video mode khác nhau. Dùng NoModeSet – tắt kernel mode setting, kernel không tự set độ phân giải. Hoặc Xforcevesa – ép dùng driver VESA.
Thử các tham số này xem cái nào chạy – có thể dùng cả hai "nomodeset xforcevesa".