Author

Làm Android app trên điện thoại

image - Image 1

DEMO

APK

📄 ai-gomoku.apk

🚀 Tự Build Game AI Caro Trên Chính… Điện Thoại Android?!

(Chuyện thật 100%, không phải phim khoa học viễn tưởng)

Chào anh em dev,
Hôm nay mình chia sẻ một trải nghiệm khá “dị”: xây dựng một game AI đánh cờ caro (Gomoku) chạy bằng WebAssembly, build APK Android, và toàn bộ quá trình diễn ra… ngay trên điện thoại! Không PC, không Android Studio, không chuột phím xịn xò 😎

Nghe hơi điên? Ừ, lúc làm mình cũng thấy vậy. Nhưng nó chạy thật, chơi thật, và AI đánh rất gắt.

♟️ 1. Biến Một Con Quái Vật C++ Thành AI Chạy Trong Trình Duyệt

Con AI mình dùng là Rapfi – một engine Gomoku/Renju viết bằng C++, dùng tìm kiếm alpha-beta kết hợp mạng nơ-ron NNUE. Vấn đề là:

Trình duyệt không chạy được C++.

Giải pháp: dùng Emscripten để “phiên dịch” C++ → WebAssembly (WASM).

Nhưng đời không như mơ…

😵 Vấn đề chí mạng: Đa luồng vs Android WebView

Rapfi bản gốc dùng đa luồng (pthreads) để tính nhanh. Nhưng:

Android WebView không hỗ trợ SharedArrayBuffer

Mà không có SharedArrayBuffer thì pthreads = toang

👉 Giải pháp: build Rapfi thành phiên bản đơn luồng:

-DNO_MULTI_THREADING=ON

Hy sinh tốc độ một chút, đổi lại là chạy được ở mọi nơi.

⚡ Bonus tăng tốc

Bật thêm:

-DUSE_WASM_SIMD=ON

để dùng SIMD 128-bit → tăng tốc phần mạng nơ-ron.

👉 Kết quả cuối:

File .wasm ~ 1.1MB

File dữ liệu mạng nơ-ron ~ 40MB

Chạy mượt trong browser bên trong app Android

Nói nôm na: một con AI C++ nặng đô đã được “nhét gọn” vào trình duyệt như một trang web.

🧩 2. Kiến Trúc App: Một Con Búp Bê Nga Công Nghệ

App nhìn thì đơn giản, nhưng bên trong là nguyên một búp bê Nga 4 lớp:

Android App (Java)

WebView (trình duyệt mini)

Web Server mini (NanoHTTPD)

Trang web vẽ bàn cờ + AI WASM

❓ Tại sao lại phải có web server trong app?

Vì WebView cấm đủ thứ khi load file local (file://) do CORS.
Cho nên mình nhét hẳn một server localhost (port 18080) vào app để:

Phục vụ HTML, JS, WASM

Né toàn bộ hạn chế bảo mật khó chịu của WebView

🔌 Giao tiếp với AI kiểu gì?

JavaScript nói chuyện với AI WASM bằng Gomocup Protocol – dạng lệnh text:

START

TURN

BOARD

Y chang như chat với một con bot qua terminal 😄

🔥 3. Cao Trào: Build APK Android Trực Tiếp Trên Điện Thoại

Đây mới là đoạn “điên” nhất.

Bình thường dev Android cần:

PC

Android Studio

RAM 16GB trở lên cho đỡ lag 😭

Còn mình thì dùng:

Termux

Ubuntu chạy trong Termux

Gradle CLI

😱 Vấn đề lớn: Công cụ x86 vs CPU ARM

Một số tool Android chỉ có bản x86_64 (Intel), trong khi điện thoại là ARM.

👉 Giải pháp: dùng QEMU để giả lập CPU Intel ngay trên ARM.

Nôm na:

“Thuê một ông phiên dịch giả làm máy tính Intel để chạy hộ mấy tool khó ở.”

Pipeline build trông như sau:

Code Java
→ javac (ARM)
→ aapt2 (x86 qua QEMU)
→ d8/r8 (ARM)
→ apksigner (ARM)
→ APK

⏳ Có chậm không? Có!
❌ Có ổn định không? Kém hơn PC!
✅ Nhưng có build ra APK không? CÓ!

Và khoảnh khắc cài được APK do chính điện thoại tự build ra thật sự rất đã 🤯

🧠 Những Bài Học Rút Ra

  1. WebAssembly cực kỳ mạnh – có thể đưa AI native vào web/app hybrid một cách nghiêm túc.

  2. Android WebView có nhiều hạn chế ngầm, đặc biệt với đa luồng.

  3. Termux + QEMU = combo nghịch ngợm cực mạnh cho anh em thích vọc low-level.

  4. Không có PC? Vẫn làm được sản phẩm thật nếu đủ kiên nhẫn.

  5. Build chậm không đáng sợ. Build được mới là quan trọng.

🎯 Dự Án Dành Cho Ai?

Dev thích AI + Game + Mobile

Người thích vọc Linux trên Android

Anh em thích tự do công nghệ, không phụ thuộc PC

Hoặc đơn giản là thích nghe mấy câu chuyện dev điên điên 😄

✨ Kết

Từ một engine C++ chuyên nghiệp, mình đã:

Chuyển sang WebAssembly

Gắn vào giao diện web

Nhét vào Android WebView

Và build APK ngay trên điện thoại

Toàn bộ quá trình giống như:

“Nấu một bữa tiệc 5 sao… bằng bếp gas mini trong lều trại.”

Khó, cực, lâu – nhưng vui và rất đã.