Hal*_*erq 6 android google-drive-api gradle-plugin
我最近将 Gradle 插件从版本更新3.4.2为3.5.0.
用于访问云端硬盘文件列表的代码已停止工作。
我得到:403 Forbidden domain“:“usageLimits”,“原因”:“dailyLimitExceededUnreg”,“消息”:“已超出未经身份验证使用的每日限制。继续使用需要注册。”
如果我3.4.2再次使用它可以正常工作。
// Login
signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestScopes(new Scope(DriveScopes.DRIVE_FILE))
.build();
GoogleSignInClient client = GoogleSignIn.getClient(Backup.this, signInOptions);
startActivityForResult(client.getSignInIntent(), REQUEST_CODE_SIGN_IN);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (requestCode == REQUEST_CODE_SIGN_IN) {
if (resultCode == Activity.RESULT_OK && resultData != null) {
handleSignInResult(resultData);
}
...
}
super.onActivityResult(requestCode, resultCode, resultData);
}
private void handleSignInResult(Intent result) {
GoogleSignIn.getSignedInAccountFromIntent(result)
.addOnSuccessListener(new OnSuccessListener<GoogleSignInAccount>() {
@Override
public void onSuccess(GoogleSignInAccount googleAccount) {
// Use the authenticated account to sign in to the Drive service.
GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(Backup.this, Collections.singleton(DriveScopes.DRIVE_FILE));
credential.setSelectedAccount(googleAccount.getAccount());
Drive googleDriveService =
new Drive.Builder(
AndroidHttp.newCompatibleTransport(),
new GsonFactory(),
credential)
.setApplicationName("MyAPP")
.build();
mDriveServiceHelper = new BackupDriveServiceHelper(googleDriveService);
// get info
mDriveServiceHelper.readFileInfo()
.addOnSuccessListener(new OnSuccessListener<Bundle>() {
...
})
.addOnFailureListener(new OnFailureListener() {
...
});
...
}
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
public class BackupDriveServiceHelper {
...
public Task<Bundle> readFileInfo() {
return Tasks.call(mExecutor, new Callable<Bundle>() {
@Override
public Bundle call() throws Exception {
// Retrieve the metadata as a File object.
String pageToken = null;
do {
FileList result = mDriveService.files().list()
.setSpaces("drive")
.setFields("files(id, name, size, modifiedTime, description)")
.setPageToken(pageToken)
.execute(); // <<<<< error 403
...
pageToken = result.getNextPageToken();
} while (pageToken != null);
...
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我发现在针对 Android 8 (API27) 时,如果我将其添加到项目 gradle.properties 中,我可以让 Google Drive 与 Gradle 3.5.0 一起使用
android.enableD8=false
Run Code Online (Sandbox Code Playgroud)
但是,在针对 Android 9 (API 28) 并将 android.support.* 替换为 androidx.* 后,我收到此警告:
The option 'android.enableD8' is deprecated and should not be used anymore.
Run Code Online (Sandbox Code Playgroud)
问题又回来了。在我看来,D8 DEX 编译器导致了问题,但无法再禁用它?
我已为 D8 https://issuetracker.google.com/issues/140882055提交了错误报告
更新:Google 建议的解决方案确实有效:将其添加到 proguard-rules.pro 后,Google Drive 适用于 Gradle 5.4.1 和 Plugin 3.5.0
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |