feat: Android APP V1 - Experimental Alpha

This commit is contained in:
2026-06-05 07:40:25 +02:00
parent bf4e6891d1
commit 9a1305f976
179 changed files with 8031 additions and 120 deletions

View File

@@ -0,0 +1,99 @@
'use strict';
const fs = require('fs');
const os = require('os');
const path = require('path');
/**
* @param {string} filePath
* @returns {boolean}
*/
function isExecutableStudioSh(filePath) {
try {
const stat = fs.statSync(filePath);
return stat.isFile() && (stat.mode & 0o111) !== 0;
} catch {
return false;
}
}
/**
* @param {string} homeDir
* @returns {string | null}
*/
function findJetBrainsToolboxStudioSh(homeDir) {
const toolboxRoot = path.join(
homeDir,
'.local/share/JetBrains/Toolbox/apps/AndroidStudio'
);
let entries;
try {
entries = fs.readdirSync(toolboxRoot, { withFileTypes: true });
} catch {
return null;
}
const studioPaths = entries
.filter((entry) => entry.isDirectory())
.map((entry) => path.join(toolboxRoot, entry.name, 'bin/studio.sh'))
.filter((candidate) => isExecutableStudioSh(candidate))
.sort();
return studioPaths.at(-1) ?? null;
}
/**
* @param {{ env?: NodeJS.ProcessEnv; homeDir?: string }} [options]
* @returns {string | null}
*/
function resolveAndroidStudioPath(options = {}) {
const env = options.env ?? process.env;
const homeDir = options.homeDir ?? os.homedir();
const fromEnv = String(env.CAPACITOR_ANDROID_STUDIO_PATH ?? '').trim();
if (fromEnv && isExecutableStudioSh(fromEnv)) {
return fromEnv;
}
const candidates = [
'/usr/local/android-studio/bin/studio.sh',
'/opt/android-studio/bin/studio.sh',
path.join(homeDir, 'android-studio/bin/studio.sh'),
'/var/lib/flatpak/app/com.google.AndroidStudio/x86_64/stable/active/files/extra/bin/studio.sh',
path.join(
homeDir,
'.local/share/flatpak/app/com.google.AndroidStudio/x86_64/stable/active/files/extra/bin/studio.sh'
),
'/snap/android-studio/current/bin/studio.sh'
];
for (const candidate of candidates) {
if (isExecutableStudioSh(candidate)) {
return candidate;
}
}
return findJetBrainsToolboxStudioSh(homeDir);
}
module.exports = {
resolveAndroidStudioPath,
isExecutableStudioSh
};
if (require.main === module) {
const resolved = resolveAndroidStudioPath();
if (!resolved) {
console.error(
'Could not find Android Studio (studio.sh). Install Android Studio or set CAPACITOR_ANDROID_STUDIO_PATH.'
);
process.exit(1);
}
process.stdout.write(`${resolved}\n`);
}