- vừa được xem lúc

Tôi đã build một Chromium cho Android như thế nào?

0 0 10

Người đăng: Hà Thanh Hoài

Theo Viblo Asia

1. Chromium Project là gì?

Các dự án Chromium bao gồm ChromiumChromium OS, các dự án nguồn mở(open-source projects) đằng sau trình duyệt Google Chrome và Google Chrome OS, tương ứng. Trang web này chứa tài liệu và mã liên quan đến các dự án Chromium và dành cho các nhà phát triển quan tâm đến việc tìm hiểu cũng như đóng góp cho các dự án nguồn mở(open-source projects).

  • Chromium: là một dự án trình duyệt nguồn mở nhằm xây dựng một cách an toàn hơn, nhanh hơn và ổn định hơn cho tất cả người dùng để trải nghiệm web. Trang web này chứa các tài liệu thiết kế, tổng quan về kiến trúc, thông tin thử nghiệm, v.v. .để giúp bạn tìm hiểu cách xây dựng và làm việc với Chromium source code. Nó là cha đẻ của một số trình duyệt như Chrome, Cốc Cốc, BChrome, Opera,...Tất cả những trình duyệt này đều dựa mã nguồn mở(open-source projects) Chromium.
  • Chromium OS: là một dự án nguồn mở nhằm cung cấp trải nghiệm máy tính nhanh, đơn giản và an toàn hơn cho những người dành phần lớn thời gian của họ trên web. Tìm hiểu thêm về các mục tiêu của dự án , nhận bản dựng mới nhất và tìm hiểu cách bạn có thể tham gia, gửi mã và gửi lỗi.

Hôm nay tôi sẽ đi vào việc làm thế nào để có thể lấy được source code của open-source này và build nó thành 1 apk file, cái mà có thể dùng để cài vào hệ điều hành Android và dùng nó như một trình duyệt cơ bản nhất.

2. Làm cách nào để build một Chromium apk?

2.1 Yêu cầu về hệ thống:

  • Máy Intel 64-bit chạy Linux với ít nhất 8GB RAM. Hơn 16GB là rất khuyến khích.
  • Ít nhất 100GB dung lượng đĩa trống.
  • Bạn phải cài đặt Git và Python.

Lúc đầu mình có cài máy với 8GB RAM, tiến trình chạy được 1 nửa thì bị dừng lại bởi thiếu RAM. Khuyến khích các bạn nên chạy trên 1 máy cấu hình thật mạnh, ít nhất nên trên 16GB RAM (Tôi chạy máy 20GB RAM thấy khá ổn). Tôi có chạy trên vài cấu hình thì thấy như sau:

  • Máy 8GB RAM, 2 luồng (Máy ảo, cài Virtual box 7 và Ubuntu 22.04)-> Hầu như là không chạy nổi. Tiến trình chạy được 1 nửa thì bị kill.
  • Máy 16GB RAM, 4 luồng (Máy ảo, cài Virtual box 7 và Ubuntu 22.04)-> Chạy thành công nhưng tốn khá nhiều thời gian. CPU và RAM lúc nào cũng chiếm 90%-100%, hầu như phải tắt hết các tiến trình khác để phục vụ cho việc build file apk. Thời gian chạy khá lâu khoảng 10-12 tiếng cho lần đầu tiên.
  • Máy 20GB RAM, 8 luồng(Server, cài Ubuntu 22.04, Python 3) -> Chạy khá mượt mà, tiến trình chạy nhanh. Thời gian chạy khoàng 4-7 tiếng. Notes: Xây dựng ứng dụng Android trên Windows hoặc Mac không được hỗ trợ và không hoạt động.

2.2 Yêu cầu về cá nhân

  • Nên chuẩn bị một chút kiến thức về Linux và Ubuntu, command line. Chủ yếu các lệnh đều sử dụng command line nên trang bị nó là điều cần thiết.

2.3 Clone source code và build

  • Bạn tạo 1 thư mục trong máy tính của mình sau đó thực hiện clone code theo link sau:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git)

Kết quả trả về là 1 thư mục "depot_tools". Thực hiện lệnh trên có thể nó sẽ báo lỗi chưa cài Git. Bạn sẽ cần cài git, lên search cái install git bằng cmd sau đó thực hiện lại lệnh trên.

  • Tiếp theo mình dùng lệnh pwd, nó sẽ trả về đường dẫn thư mục của bạn. Sau đó bạn thực hiện cài đặt môi trường cho nó. Việc gắn đường dẫn này mới có thể thực hiện lệnh build ở các bước tiếp theo, không có sẽ không chạy được. Kết quả trả ra như sau:
export PATH="$PATH:/home/hoaiht/code/depot_tools"

Trong đó "home/hoaiht/code/" là thư mục của tôi vừa clone code. Tôi sẽ thực hiện 1 chuỗi các lệnh chạy lần lượt như sau:

mkdir chromium //tạo 1 thư mục tên là chromium
cd chromium // trỏ vào thư mục vừa tạo
fetch --nohooks --no-history android

Lệnh fetch trên chỉ sử dụng 1 lần, nếu các bạn đã chạy nó rồi thì lần sau chỉ cần sử dụng lệnh:

gclient runhooks

Lệnh này sẽ tốn của các bạn khoảng 30 phút, lâu hơn với mạng chậm.

Khi fetch hoàn thành, nó sẽ tạo một .gclient (tệp ẩn, bạn có thể search cách hiện file ẩn trong Ubuntu nếu không nhìn thấy nó) và một thư mục tên là src. Mở file .gclient ra bạn sẽ thấy nó target đến OS là Android(với các nền tảng khác thì mình sẽ thay đổi tham số này). Nếu không có thư mục và file trên chứng tỏ bạn clone lỗi, mình cần làm lại từ đầu.

  • Tiếp theo:
cd src //trỏ vào thư mục src
./build/install-build-deps.sh --android //cài đặt thêm cái phụ thuộc cho việc build

Đợi lệnh trên chạy xong, một lần nữa thực hiện chạy tải các file nhị phân và vài tệp cần thiết khác.

gclient runhooks
  • Sau khi tất cả các bước trên chạy xong và success(nhớ là cần success, vì có thể thiếu 1 file cấu hình nào đó việc build file của bạn cũng không thể chạy được). Tôi chạy tiếp lệnh sau để tạo file .ninja
gn gen out/Default //Tạo 1 thư mục tên là Default chứa các file cấu hình của Ninja tool và GN tool

Notes: Có một bước khá quan trọng, là cấu hình về việc sẽ build trên nền tảng nào(Android, iOS, Mac,....). Việc không cấu hình này sẽ gây ra lỗi 100%.

Trong thư mục ../src/out/Default các bạn tìm file args.gn. Mình cần thêm các cấu hình sau để build trên Android:

target_os = "android" target_cpu = "arm64"

Ở đây có một tham số cần chú ý là tham số target_cpu = "arm64". Các bạn cần kiểm tra kiến trúc CPU của mình trên điện thoại(mục thông tin điện thoại hoặc cài app Droid Hardware Info) và truyền vào tham số phù hợp. Hiện tại có 3 kiến trúc CPU chính:

  • ARM: ARMv7 hoặc armeabi
  • ARM64: AArch64 hoặc arm64
  • x86: x86 hoặc x86abi Các bạn theo dõi bảng sau, cột thứ 2 là các tham số có thể truyền vào file bên trên:
getprop ro.product.cpu.abi output(Kiểu CPU) target_cpu value(Giá trị truyền vào tham số)
arm64-v8a arm64
armeabi-v7a arm
x86 x86
x86_64 x64

Cấu hình xong thì mình save nó và chạy tiếp theo thôi. Bước vừa rồi khá quan trọng, các bạn lưu ý.

Okey, đến bước cuối cùng rồi. Mình thực thi lệnh sau để build một apk

autoninja -C out/Default chrome_public_apk

Ngoài ra các bạn cũng có thể build tệp .aab nếu cần. Theo dõi các output như bên dưới để export file bạn cần:

Params Mô tả
monochrome_public_bundle (MonochromePublic.aab) minSdkVersion=24 (Nougat). Contains both Chrome and WebView (to save disk space).
trichrome_chrome_bundle (TrichromeChrome.aab) minSdkVersion=29 (Android 10). Native code shared with WebView through a “Static Shared Library APK”: trichrome_library_apk. Corresponding WebView target: trichrome_webview_bundle.
chrome_public_bundle và chrome_public_apk (ChromePublic.aab, ChromePublic.aab) minSdkVersion=24 (Nougat). Used for local development (to avoid building WebView). WebView packaged independently (system_webview_bundle / system_webview_apk).

Quá trình này sẽ mất thời gian khá lâu. Tùy thuộc vào cấu hình hệ thống yêu cầu như mình đã nêu ở mục 2.1. Sau khi build hoàn tất các bạn có thể lấy apk tại thư mục:

../chromium/src/out/Default/apks

Các file .apk này khá mập mạp, dao động từ 700MB đến 1,4GB. Thư mục soure code của dự án này cũng khá to rơi vào khoảng 1,2M items, đây là lý do tại sao chúng ta build mất khá nhiều thời gian như vậy.

Build cho các nền tảng khác tương tự, chỉ khác về truyền tham số. Các bạn có thể theo dõi thêm tại:

https://chromium.googlesource.com/chromium/src/+/main/docs/get_the_code.md

Bài viết có tham khảo từ :

https://chromium.googlesource.com/chromium/src/+/main/docs/get_the_code.md

ngoài ra còn các kinh nghiệm và trường hợp cụ thể mình đã gặp phải. Bài viết cũng có vài quan điểm cá nhân. Chúc các bạn vọc vạch thành công.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 254

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 189

- vừa được xem lúc

[Android] Hiển thị Activity trên màn hình khóa - Show Activity over lock screen

Xin chào các bạn, Hôm nay là 30 tết rồi, ngồi ngắm trời chờ đón giao thừa, trong lúc rảnh rỗi mình quyết định ngồi viết bài sau 1 thời gian vắng bóng. .

0 0 93

- vừa được xem lúc

Tìm hiểu Proguard trong Android

1. Proguard là gì . Cụ thể nó giúp ứng dụng của chúng ta:. .

0 0 82

- vừa được xem lúc

Làm ứng dụng học toán đơn giản với React Native - Phần 6

Chào các bạn một năm mới an khang thịnh vượng, dồi dào sức khỏe. Lại là mình đây Đây là link app mà các bạn đang theo dõi :3 https://play.google.com/store/apps/details?id=com.

0 0 51

- vừa được xem lúc

20 Plugin hữu ích cho Android Studio

1. CodeGlance. Plugin này sẽ nhúng một minimap vào editor cùng với thanh cuộn cũng khá là lớn. Nó sẽ giúp chúng ta xem trước bộ khung của code và cho phép điều hướng đến đoạn code mà ta mong muốn một cách nhanh chóng.

0 0 301