Sunday, 27 December 2015

Những khái niệm khi bắt đầu "chọc" Android

Android là con robot hư hỏng, đã sản sinh vô tính và thống trị thế giới smartphone. Trong những con robot hư hỏng này, có những con còn zin và rất ngoan. Để "trưởng thành" và hư hỏng hơn, nó cần phải trải qua quá trình đầy thay đổi và đau đớn mà đâu đó trong thế giới loài người, người ta gọi là DẬY THÌ. Còn với Android, đó là rooting, flash ROM mới ...



Có rất nhiều từ khoá quan trọng để có thể bắt đầu quá trình phá hoại này. Bài viết sẽ tổng hợp những khái niệm này giúp người dùng bắt đầu lấn sang sân chơi mới.

ROM là gì?

ROM là viết tắt của Read-Only Memory - bộ nhớ chỉ cho phép đọc trên một thiết bị. Trên thiết bị chạy Android, đây là nơi mà file hệ điều hành Android được đặt. Hệ điều hành ở đây bản chất là một firmware (là một loại software cung cấp khả năng điều khiển, theo dõi và chỉnh sửa dữ liệu).
Các ROM đi kèm sẵn máy được gọi là stock ROM, các ROM do một nhà cung cấp khác đưa ra gọi là custom ROM hoặc aftermarket ROM. Ví dụ: CyanogenMod

Một file CyanogenMod ROM khi tải về là một file .zip, không có gì đặc biệt. Bên trong nó chứa một shell script ở đường dẫn META-INF/com/google/android/updater-script
Script này làm nhiệm vụ kiểm tra phiên bản, cài đặt mọi thứ.

rooting là gì?
là quá trình chiếm quyền admin (gọi là quyền root - bởi android cũng là 1 hệ điều hành nhân Linux).

side-loading là gì?
Là quá trình cài đặt một phần mềm từ một nguồn nào đó không phải từ app store.
Ví dụ như tải file về rồi cài qua máy tính,... Android cho phép thực hiện điều này.

flashing là gì?
là khái niệm chỉ quá trình cài một software vào thiết bị Android. Nó tương đương với khái niệm "cài lại" trên máy tính.
Khi nói flash a ROM, tức muốn nói việc viết firmware này lên chip của phần cứng (hardware).

Có 2 cách để flash 1 thiết bị:
  1. bật thiết bị lên ở mode "fastboot" (bằng tổ hợp phím nào đó, ví dụ như phím power + tăng volume), sau đó dùng chương trình "fastboot" trên máy tính, copy software mới vào điện thoại, thông qua dây cáp.
  2. sử dụng recovery mode của thiết bị, không cần đến máy tính. Chọn file .zip rồi install / update từ recovery mode.
recovery là gì?
là một chế độ (mode) mà thiết bị có thể chạy rồi thực hiện các chức năng khôi phục máy. Bản chất của recovery cũng là 1 phần mềm.
Khi bật máy và chọn vào recovery mode (bấm tổ hợp phím, tuỳ từng máy, ví dụ: power + volume down), người dùng có thể cài đặt các bản update (thường là file .zip), xoá dữ liệu.
Recovery đi kèm với máy được gọi là stock recovery, tính năng của recovery này thường rất hạn chế. Có thể cài các recovery mode khác để thực hiện được nhiều tính năng hơn.
Phổ biến nhất là TWRP (TeamWin Recovery Project) - là recovery phổ biến nhất.
CR (Cyanogen Recovery) là recovery mới xuất hiện được viết bởi team viết Cyanogen mod.
Nếu thiết bị đã bật adb debugger, từ máy tính, chạy lệnh sau để reboot thiết bị rồi vào mode recovery:
adb reboot recovery
bootloader là gì?
bootloader là tên chương trình được chạy đầu tiên khi bạn bấm nút power (để bật máy).
Một "locked bootloader" là bootloader đã bị khoá bởi nhà sản xuất nhằm chỉ cho phép load hệ điều hành đi kèm với máy. Để load các hê điều hành khác, ví dụ như "Cyanogenmod", ta phải unlock bootloader (có sử dụng chương trình ``fastboot`` để làm việc này).

adb và fastboot
là 2 chương trình giúp tương tác trực tiếp với thiết bị từ máy tính.
2 chương trình này đi kèm với bộ SDK android (https://developer.android.com/sdk/installing/index.html)

updater-script
Vài dòng đầu tiên của script META-INF/com/google/android/updater-script lấy từ file zip
dành cho điện thoại OPPO Find 7
$ head META-INF/com/google/android/updater-script
assert(getprop("ro.product.device") == "FIND7" || getprop("ro.build.product") == "FIND7" ||
       getprop("ro.product.device") == "find7a" || getprop("ro.build.product") == "find7a" ||
       getprop("ro.product.device") == "X9007" || getprop("ro.build.product") == "X9007" ||
       getprop("ro.product.device") == "X9006" || getprop("ro.build.product") == "X9006" || abort("This package is for \"find7,find7a,X9007,X9006\" devices; this is a \"" + getprop("ro.product.device") + "\"."););
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");
set_metadata("/tmp/backuptool.sh", "uid", 0, "gid", 0, "mode", 0755);
set_metadata("/tmp/backuptool.functions", "uid", 0, "gid", 0, "mode", 0644);
run_program("/tmp/backuptool.sh", "backup");
Chú ý:
- khi flash lại ROM, cần reset to factory trước để xoá mọi dữ liệu của phần mềm, tránh khi cài lên bản khác, phần mêm sẽ liên tục báo lỗi do không tương thích version.

Tham khảo:
https://wiki.cyanogenmod.org/w/Basic_concepts
https://wiki.cyanogenmod.org/w/All_About_Recovery_Images
https://wiki.cyanogenmod.org/w/Doc:_adb_intro
http://www.pcmag.com/encyclopedia/term/63820/android-rom
https://www.quora.com/What-is-ROM-in-Android
https://en.wikipedia.org/wiki/Firmware

Hết.
Happy Androiding :3
HVN at familug.org