fix: repair Android startup and improve mobile web layouts
This commit is contained in:
1 parent
4c2286e70d
commit
b0cbd0f149
30 files changed
+609
-140
No files matched your search
@@ -3,6 +3,7 @@
|
||||
// - нативные библиотеки только под arm64-v8a: неполный каталог другой ABI роняет приложение при старте
|
||||
// («couldn't find DSO to load: libexpo-modules-core.so» на x86-эмуляторе);
|
||||
// - есть библиотеки, без которых приложение не запустится;
|
||||
// - .so сжаты (useLegacyPackaging): Android распакует их для SoLoader / ARM-трансляции;
|
||||
// - PT_LOAD-сегменты каждой .so выровнены по 16 КБ: иначе на устройствах с 16 КБ страницами памяти
|
||||
// (Android 15+) библиотека не загружается и приложение закрывается сразу после запуска.
|
||||
// Запуск: node scripts/check-apk.mjs app-release.apk
|
||||
@@ -29,11 +30,11 @@ export function zipEntries(buf) {
|
||||
const commentLen = buf.readUInt16LE(p + 32);
|
||||
const local = buf.readUInt32LE(p + 42);
|
||||
const name = buf.toString('utf8', p + 46, p + 46 + nameLen);
|
||||
out.set(name, () => {
|
||||
out.set(name, Object.assign(() => {
|
||||
const start = local + 30 + buf.readUInt16LE(local + 26) + buf.readUInt16LE(local + 28);
|
||||
const raw = buf.subarray(start, start + size);
|
||||
return method === 0 ? raw : inflateRawSync(raw);
|
||||
});
|
||||
}, { compressionMethod: method }));
|
||||
p += 46 + nameLen + extraLen + commentLen;
|
||||
}
|
||||
return out;
|
||||
@@ -62,6 +63,9 @@ export function checkApk(buf) {
|
||||
const mine = new Set(libs.filter((n) => n.startsWith(`lib/${ABI}/`)).map((n) => n.split('/')[2]));
|
||||
for (const lib of REQUIRED) if (!mine.has(lib)) problems.push(`нет lib/${ABI}/${lib}`);
|
||||
for (const name of libs.filter((n) => n.startsWith(`lib/${ABI}/`))) {
|
||||
if (entries.get(name).compressionMethod !== 8) {
|
||||
problems.push(`${name}: библиотека не сжата, включите useLegacyPackaging для ARM-трансляции`);
|
||||
}
|
||||
const align = loadAlignment(entries.get(name)());
|
||||
if (align < PAGE) problems.push(`${name}: сегменты выровнены по ${align} байт, нужно ${PAGE} (16 КБ страницы)`);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user