|
@@ -198,16 +198,29 @@ async function main() {
|
|
|
setGitHubEnv('ANDROID_HOME', SDK_ROOT);
|
|
|
setGitHubEnv('ANDROID_SDK_ROOT', SDK_ROOT);
|
|
|
|
|
|
- // 5. 先接受 licenses(使用多个 echo y)
|
|
|
+ // 5. 先接受 licenses(使用输入重定向文件)
|
|
|
console.log('📝 接受 SDK licenses...');
|
|
|
const sdkManagerPath = path.join(CMDLINE_TOOLS_DIR, 'bin', 'sdkmanager.bat');
|
|
|
- // 使用多个 y 来处理多个许可证提示
|
|
|
- const licenseCmd = `(echo y & echo y & echo y & echo y & echo y & echo y & echo y & echo y) | "${sdkManagerPath}" --licenses --sdk_root=${SDK_ROOT}`;
|
|
|
+
|
|
|
+ // 创建包含多个 y 的临时文件(每个 y 一行)
|
|
|
+ const tempInputFile = path.join(process.env.TEMP, 'sdk-licenses-input.txt');
|
|
|
+ // 根据日志显示有 7 个许可证,我们用 20 个 y 确保足够
|
|
|
+ fs.writeFileSync(tempInputFile, 'y\n'.repeat(20));
|
|
|
+
|
|
|
+ // 使用输入重定向 < 而不是管道 |
|
|
|
+ const licenseCmd = `"${sdkManagerPath}" --licenses --sdk_root=${SDK_ROOT} < "${tempInputFile}"`;
|
|
|
execSync(licenseCmd, {
|
|
|
stdio: 'inherit',
|
|
|
shell: 'cmd.exe'
|
|
|
});
|
|
|
|
|
|
+ console.log('✅ licenses 接受完成');
|
|
|
+
|
|
|
+ // 清理临时文件
|
|
|
+ if (fs.existsSync(tempInputFile)) {
|
|
|
+ fs.unlinkSync(tempInputFile);
|
|
|
+ }
|
|
|
+
|
|
|
// 6. 然后安装 platforms 和 build-tools
|
|
|
console.log('📦 安装 Android SDK 组件...');
|
|
|
runSdkManager([
|