如何通过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
相关产品推荐
相关产品推荐

