Bạn đang gặp phải tình trạng ứng dụng Expo của mình chỉ hiển thị một màn hình trắng sau khi build cho Android, mặc dù mọi thứ đều hoạt động tốt trong quá trình phát triển? Lỗi này thường xảy ra khi sử dụng kết hợp expo-router và expo-sqlite, gây ra không ít khó khăn cho các nhà phát triển. Bài viết này sẽ cung cấp cho bạn một hướng dẫn toàn diện để xác định nguyên nhân và khắc phục triệt để vấn đề này, giúp bạn đưa ứng dụng của mình hoạt động trơn tru trên mọi thiết bị.
Có nhiều yếu tố có thể dẫn đến lỗi màn hình trắng khi sử dụng expo-router và expo-sqlite. Dưới đây là một số nguyên nhân phổ biến nhất mà bạn nên kiểm tra:
Sau khi đã xác định được các nguyên nhân tiềm ẩn, hãy cùng xem xét các bước cụ thể để khắc phục lỗi màn hình trắng:
Đảm bảo rằng file metro.config.js
của bạn đã được cấu hình đúng cách để hỗ trợ aliasing (nếu bạn sử dụng). Kiểm tra xem các đường dẫn đã được định nghĩa chính xác chưa. Ví dụ:
module.exports = {
resolver: {
extraNodeModules: {
'@': __dirname,
},
},
};
Kiểm tra file tsconfig.json
để đảm bảo rằng các đường dẫn (paths) đã được khai báo chính xác. Điều này giúp TypeScript hiểu rõ cấu trúc thư mục của dự án. Ví dụ:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
}
}
}
Sử dụng phiên bản mới nhất của expo-sqlite có thể giải quyết các vấn đề tương thích. Hãy cập nhật bằng lệnh sau:
npx expo install expo-sqlite
Nếu bạn đang sử dụng drizzle-studio-expo, hãy đảm bảo rằng bạn đang truyền trực tiếp đối tượng SQLite database vào useDrizzleStudio
, thay vì một đối tượng đã được "drizzle" hoá. Ví dụ:
import * as SQLite from "expo-sqlite";
import { useDrizzleStudio } from "expo-drizzle-studio-plugin";
const db = SQLite.openDatabaseSync("mydb.db");
export default function App() {
useDrizzleStudio(db);
// ...
}
Thay vì:
const expoSqlite = SQLite.openDatabaseSync("mydb.db");
const db = drizzle(expoSqlite, { schema: schema.default });
export default function App() {
useDrizzleStudio(db); // SAI!
// ...
}
Nếu bạn đã bật New Architecture, hãy đảm bảo rằng bạn đã cập nhật lên phiên bản Expo SDK 52 trở lên và đặt newArchEnabled=true
trong file app.json
của bạn:
{
"expo": {
// ...
"experiments": {
"newArchEnabled": true
}
}
}
Sau khi thực hiện các thay đổi cấu hình, hãy xóa cache và build lại ứng dụng để đảm bảo các thay đổi được áp dụng:
expo start --clear
eas build -p android --profile development
Đôi khi lỗi có thể liên quan đến emulator hoặc thiết bị cụ thể. Thử nghiệm trên các thiết bị hoặc emulator khác nhau để xác định xem vấn đề có phải do môi trường hay không.
Lỗi màn hình trắng khi sử dụng expo-router và expo-sqlite trên Android có thể do nhiều nguyên nhân khác nhau. Bằng cách kiểm tra kỹ lưỡng cấu hình, cập nhật các phiên bản thư viện và làm theo các bước khắc phục được trình bày trong bài viết này, bạn có thể nhanh chóng xác định và giải quyết vấn đề, giúp ứng dụng của mình hoạt động ổn định trên mọi nền tảng. Chúc bạn thành công!
Bài viết liên quan