0

앱에 Google Smart Lock을 구현 중이며 이전에 Api Client 빌딩에 문제가 없었습니다. 사실, 일부 구문 변경을 완료하고 코드 정리 (API 클라이언트를 초기화하는 코드조차하지 않음) 및 abstract method zza으로 인해 build()이 Api 클라이언트 빌더에서 호출 될 때 내 앱이 종료됩니다. 갑자기 실패 시작 내가 왜 단서가 없다GoogleApiClient 빌더가 빌드하지 못했습니다.

java.lang.AbstractMethodError: abstract method "com.google.android.gms.common.api.Api$zze com.google.android.gms.common.api.Api$zza.zza(android.content.Context, android.os.Looper, com.google.android.gms.common.internal.zzq, java.lang.Object, com.google.android.gms.common.api.GoogleApiClient$ConnectionCallbacks, com.google.android.gms.common.api.GoogleApiClient$OnConnectionFailedListener)" 
                       at com.google.android.gms.common.api.GoogleApiClient$Builder.build(Unknown Source) 

, 그리고 내가이 오류가 발생했을 그 변경 사항을 찾을 수 없습니다 : 여기에 오류가 표시되고있다. 왜 추상적 인 메소드가 오버라이드되지 않는가? 라이브러리의 깊숙한 곳에 중첩되어 있으므로 어떻게 영향을 미쳤는지 알 수 없습니다.

CredentialManager라는 관리자에서 Google Api Client 호출을 래핑했습니다. 이 오류의 원인이 무엇인지에 어떤 통찰력이있는 경우

public CredentialManager(ContextProvider contextProvider) { 
    mContextProvider = contextProvider; 
    mCredentialsApiClient = new GoogleApiClient.Builder(mContextProvider.getContext()) 
      .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { 
       @Override 
       public void onConnected(@Nullable Bundle bundle) { 
        Log.i(CredentialManager.TAG, "Api connected"); 
       } 

       @Override 
       public void onConnectionSuspended(int i) { 
        Log.i(CredentialManager.TAG, "Connection suspended with status " + i); 
       } 
      }) 
      .enableAutoManage(mContextProvider.getContext(), connectionFailedResult -> { 
       if (connectionFailedResult.hasResolution()) { 
        try { 
         connectionFailedResult.startResolutionForResult(
           mContextProvider.getContext(), 
           CredentialManager.Codes.RESOLVE_CONNECTION_REQUEST_CODE); 
        } catch (IntentSender.SendIntentException e) { 
         // Unable to resolve, log error 
         Log.e(CredentialManager.TAG, "Resolution failed: " + e.getMessage()); 
        } 
       } else { 
        //instead of displaying a dialog, just let the user continue and login manually. 
        Log.e(CredentialManager.TAG, "Connection failed: " + connectionFailedResult.getErrorMessage()); 
       } 
      }) 
      .addApi(Auth.CREDENTIALS_API) 
      .build(); 
} 

은 알려 주시기 바랍니다 : 여기에 내가 클라이언트를 초기화하는 데 사용되는 코드입니다. 전에 이런 걸 본 사람이라면 인터넷을 샅샅이 뒤졌지만 아무것도 찾을 수 없었습니다.

답변

1

일부 Google Play 서비스 종속성의 버전이 업데이트되었으며 Google 스마트 잠금에 play-services-auth 종속성이 사용되지 않는 것이 문제였습니다. Apk는 정상적으로 컴파일되지만 Google Api 클라이언트가 초기화하려고하면 중단됩니다. 문제는 모든 버전을 동일하게 만들고 캐시 + 무효화 된 android 스튜디오를 다시 컴파일하고 다시 컴파일하고 실행하는 것이 었습니다.

관련 문제