Tác giả
admin
Làm Android app trên điện thoại

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
WebAssembly cực kỳ mạnh – có thể đưa AI native vào web/app hybrid một cách nghiêm túc.
Android WebView có nhiều hạn chế ngầm, đặc biệt với đa luồng.
Termux + QEMU = combo nghịch ngợm cực mạnh cho anh em thích vọc low-level.
Không có PC? Vẫn làm được sản phẩm thật nếu đủ kiên nhẫn.
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 đã.
Đăng nhập Đăng nhập để bình luận