You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Google Play Developer API上传AAB与APK文件?

解决Google Play Developer API上传APK/AAB的问题

错误原因

你遇到的"APK cannot be analyzed using aapt dump badging"错误,核心原因是用了APK专属的上传接口来提交AAB文件。edits.apks.upload接口仅支持APK格式,AAB文件需要使用edits.bundles.upload专属接口。

修复后的完整代码示例

下面是支持同时上传APK和AAB的Node.js代码,包含鉴权、编辑会话管理、文件上传及提交的完整流程:

const fs = require('fs');
const google = require('googleapis');
const CONFIG = require('./your-config'); // 替换为你的配置文件路径

async function uploadAppPackage(packageName, filePath, versionName) {
    // 初始化鉴权客户端
    const auth = new google.auth.GoogleAuth({
        keyFile: CONFIG.DeveloperServiceApiFilePath,
        scopes: ['https://www.googleapis.com/auth/androidpublisher'],
    });

    // 创建Android Publisher API客户端
    const androidPublisherClient = google.androidpublisher({
        version: 'v3',
        auth: auth,
    });

    let editId;
    try {
        // 创建编辑会话
        const editRes = await androidPublisherClient.edits.insert({
            packageName: packageName,
        });
        editId = editRes.data.id;
        console.log('编辑会话创建成功,ID:', editId);

        // 判断文件类型,选择对应上传逻辑
        const isAab = filePath.endsWith('.aab');
        const uploadConfig = {
            packageName: packageName,
            editId: editId,
            media: {
                body: fs.createReadStream(filePath),
            },
        };

        let uploadRes;
        if (isAab) {
            uploadConfig.media.mimeType = 'application/java-archive'; // AAB官方推荐MIME类型
            uploadRes = await androidPublisherClient.edits.bundles.upload(uploadConfig);
            console.log('AAB文件上传完成');
        } else {
            uploadConfig.media.mimeType = 'application/vnd.android.package-archive'; // APK专属MIME类型
            uploadRes = await androidPublisherClient.edits.apks.upload(uploadConfig);
            console.log('APK文件上传完成');
        }

        console.log('版本代码:', uploadRes.data.versionCode);

        // 提交编辑会话,否则上传内容不会生效
        await androidPublisherClient.edits.commit({
            packageName: packageName,
            editId: editId,
        });
        console.log('编辑会话已提交,文件已同步到Play Console');

        return {
            packageName,
            version: versionName,
            versionCode: uploadRes.data.versionCode
        };
    } catch (error) {
        console.error('上传失败:', error.message);
        // 出错时回滚已创建的编辑会话
        if (editId) {
            await androidPublisherClient.edits.delete({
                packageName: packageName,
                editId: editId,
            });
            console.log('已回滚编辑会话');
        }
        throw error;
    }
}

// 调用示例
// uploadAppPackage('com.your.app.package', './release/app-release.aab', '1.0.0');

关键注意事项

  • 接口区分:AAB必须用edits.bundles.upload,APK用edits.apks.upload,二者不能混用。
  • MIME类型:严格匹配文件类型的MIME,避免解析失败。
  • 提交会话:上传后必须调用edits.commit,否则上传的文件不会被保存到Play Console后台。
  • 权限验证:确保服务账号已获得Google Play Console的编辑权限,且密钥文件路径配置正确。
  • 文件校验:确认待上传的文件路径正确、文件未损坏,且程序拥有读取权限。

内容的提问来源于stack exchange,提问作者maranR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:35:57