Android对接YouTube Data v3 API调用videos/list接口报EPERM错误求助
问题解决步骤
1. 清理无效依赖&冗余代码
你当前项目引入了桌面端专属的依赖,完全不适用于Android场景,先删除build.gradle中以下两行配置:
// 桌面端Jetty OAuth服务依赖,Android不支持,直接删除 implementation 'com.google.oauth-client:google-oauth-client-jetty:1.23.0' // 无需求的Tasks API依赖,无用直接删除 implementation 'com.google.apis:google-api-services-tasks:v1-rev48-1.23.0' exclude module: 'httpclient'
你当前仅用API Key鉴权,不需要走OAuth2.0流程,所有调用AuthorizationCodeInstalledApp的代码全部删除,你已实现的YoutubeAPI类本身就是API Key的调用逻辑,直接调用该类的start方法即可,不要混用官方快速入门里的OAuth相关冗余代码。
2. 补加网络权限
Android默认禁止应用访问网络,你上报的EPERM (Operation not permitted)错误大概率是缺少网络权限导致,需要在AndroidManifest.xml的manifest标签下(application标签外)添加权限声明:
<uses-permission android:name="android.permission.INTERNET" />
3. 可选:更新依赖版本(推荐)
你当前使用的1.23.0版本API客户端是多年前的旧版本,存在兼容性风险,建议更新到较新的稳定版:
implementation 'com.google.api-client:google-api-client-android:2.2.0' exclude module: 'httpclient' implementation 'com.google.apis:google-api-services-youtube:v3-rev20220715-2.0.0' implementation 'com.google.http-client:google-http-client-gson:2.2.0' exclude module: 'httpclient'
依赖更新后同步调整YoutubeAPI类的JSON工厂定义,用GsonFactory替代JacksonFactory更适配Android环境:
import com.google.api.client.json.gson.GsonFactory // 伴生对象内修改对应配置 private val JSON_FACTORY: JsonFactory = GsonFactory.getDefaultInstance()
4. 调用校验
- 网络请求已经放在子线程执行符合要求,拿到返回结果后需要切回主线程再更新UI
- 检查Google Cloud控制台的API Key是否已经开启Youtube Data API v3的访问权限,测试阶段可以暂时去掉应用包名、签名限制,验证功能正常后再开启安全限制。
内容的提问来源于stack exchange,提问作者Max90
相关产品推荐
相关产品推荐

