Google Drive REST API AppDataFolder не работает, если APK подписан - PullRequest
0 голосов
/ 07 февраля 2019

Поскольку API-интерфейс Google Drive Android устарел, я перешел на API-интерфейс REST Google Drive.

В моей отладочной сборке все работает нормально.
Папки и файлы создаются в корневой папке.или скрытое "appDataFolder".
Но как только я создаю подписанный APK , он больше не работает.

Вход в систему и запрос на разрешение работает.
Но если яхочу создать папку или файл. Я не получаю обратно идентификатор файла.
И всегда в корне Google Диска (независимо от того, использую я appDataFolder или нет), создается файл с именем «Без названия» с 0 КБ.

После нескольких часов поиска я не могу найти причину, по которой он не работает в подписанном APK.

Создание входа в области:

GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestScopes(new Scope(DriveScopes.DRIVE_APPDATA), new Scope(DriveScopes.DRIVE_FILE))
            .build();
    return GoogleSignIn.getClient(context, signInOptions);

GoogleAccountCredential:

// Use the authenticated account ot sign in to the Drive service
    List<String> scopes = new ArrayList<>(2);
    scopes.add(DriveScopes.DRIVE_FILE);
    scopes.add(DriveScopes.DRIVE_APPDATA);
    GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(context, scopes);
    credential.setSelectedAccount(googleSignInAccount.getAccount());

    Drive googleDriveService = new Drive.Builder(AndroidHttp.newCompatibleTransport(),
            new GsonFactory(), credential)
            .setApplicationName("Test Application")
            .build();

Создание папки:

File fileMetadata = new File();
    fileMetadata.setName("Testfolder");

    // Add parent folder
    fileMetadata.setParents(Collections.singletonList("appDataFolder"));
    fileMetadata.setMimeType("application/vnd.google-apps.folder");

    File file;
    try {
        file = mDriveService.files().create(fileMetadata)
                .setFields("id")
                .execute();
    } catch (IOException e) {
        Log.e(TAG, "Can't create folder " + folderName, e);
        return "";
    }

    Log.i(TAG, "Folder " + folderName + " ID: " + file.getId());
    return file.getId();

1 Ответ

0 голосов
/ 08 февраля 2019

Проблема в ProGuard !
Если я не использую ProGuard, он работает нормально.

Добавление этих двух строк в файл правил ProGuard:

-keep,allowshrinking class com.google.api.services.drive.model.** { *;}
-keep,allowshrinking class com.google.api.services.drive.** { *;}

После этого он работает!

...