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

Android调用Google Keep API遇java.lang.IllegalStateException版本兼容问题

Android调用Google Keep API版本不兼容问题

我正在Android项目里尝试调用Google Keep API创建笔记,现在卡在了Keep Builder初始化环节,遇到版本不兼容的错误。

依赖配置

implementation("com.google.firebase:firebase-auth:22.3.1")
implementation("com.google.android.gms:play-services-auth:21.1.0")
implementation ("com.google.api-client:google-api-client:2.4.0")
implementation ("com.google.apis:google-api-services-keep:v1-rev20210528-1.31.0")

待修复代码

public class KeepQuickstart {

    public static void createNewNote(Context context){
        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(context);
        if (account != null) {

            String idToken = account.getIdToken();
            GoogleCredentials credentials = GoogleCredentials.create(new AccessToken(idToken, null));
            HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials);
            try{
            Keep keepService = new Keep.Builder(new NetHttpTransport(), GsonFactory.getDefaultInstance(), requestInitializer)
            .setApplicationName("Ecco6").build();
                // Create note content
                Section noteBody = new Section().setText(new TextContent().setText("Finish preparations by tomorrow!"));
                Note newNote = new Note().setTitle("Customer call next week").setBody(noteBody);
                // Create the note
                try {
                    keepService.notes().create(newNote).execute();
                    // Handle success, e.g., show a toast message
                } catch (Exception e) {
                    // Handle creation failure
                    e.printStackTrace();
                }

            }catch (ExceptionInInitializerError e){
                System.out.println(e.getCause().toString());
            }

        } else {
            // User is not signed in, handle this case
            System.out.println("User not logged in.");
        }
    }
}

遇到的错误

java.lang.IllegalStateException: You are currently running with version 2.4.0 of google-api-client. You need at least version 1.31.1 of google-api-client to run version 1.31.0 of the Google Keep API library.

我试过多种方式传递HttpRequestInitializer来确保令牌正确并获取用户笔记访问权限,但都没效果,现在被这个版本错误卡着,求解决办法!


解决方案

  • 升级google-api-client版本
    错误信息明确指出,1.31.0版本的Google Keep API需要至少1.31.1版本的google-api-client支持。修改依赖配置,将google-api-client版本升级到1.31.1或更高(建议使用兼容的最新稳定版):

    implementation ("com.google.api-client:google-api-client:1.31.1")
    

    升级后同步项目,若出现依赖冲突,可通过./gradlew dependencies命令排查冲突并排除旧版本依赖。

  • 修正令牌获取逻辑
    当前代码用account.getIdToken()获取的ID Token并非Google Keep API所需的访问令牌,需调整为获取带权限的OAuth 2.0访问令牌:

    1. Google SignIn时必须请求KeepScopes.NOTES权限
    2. 使用GoogleAuthUtil获取对应权限的访问令牌,替换原ID Token的使用:
      String accessToken = GoogleAuthUtil.getToken(context, account.getAccount(), "oauth2:" + KeepScopes.NOTES);
      GoogleCredentials credentials = GoogleCredentials.create(new AccessToken(accessToken, null));
      
  • 处理网络请求线程
    Android中主线程不能执行网络请求,keepService.notes().create(newNote).execute()是同步请求,需放到子线程执行,或改用异步enqueue方式,避免触发NetworkOnMainThreadException。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:12:58