Использование клиентской библиотеки Google в Android - PullRequest
0 голосов
/ 01 июля 2018

Я добавил некоторый код, который получает информацию о профиле пользователя из People Api после того, как он вошел в систему (используя GoogleSignInOptions). Это код:

private void getProfileData(final Context context, GoogleSignInAccount account, final ProfileDataListener listener) {
    ProfileDataTask profileDataTask = new ProfileDataTask(context, account, listener);
    profileDataTask.execute();
}

private static class ProfileDataTask extends AsyncTask<GoogleSignInAccount, Void, Person> {

    private GoogleAccountCredential credential;
    private String appName;
    private ProfileDataListener listener;

    ProfileDataTask(Context context, GoogleSignInAccount account, ProfileDataListener listener) {
        this.credential = GoogleAccountCredential.usingOAuth2(context, Collections.singleton(Scopes.PROFILE));
        this.credential.setSelectedAccount(new Account(account.getEmail(), "com.google"));

        this.appName = context.getString(R.string.app_name);
        this.listener = listener;
    }

    @Override
    protected Person doInBackground(GoogleSignInAccount... accounts) {
        PeopleService service = new PeopleService.Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)
                .setApplicationName(appName)
                .build();
        try {
            return service.people()
                    .get("people/me")
                    .setPersonFields("genders,birthdays")
                    .execute();
        } catch (IOException e) {
            return null;
        }
    }

    @Override
    protected void onPostExecute(Person person) {
        super.onPostExecute(person);

        if (listener != null) {
            listener.onCompleted(person);
        }
    }
}

Это очень просто (даже если документация по этим API отсутствует) и все работает.

Зависимости Gradle:

implementation 'com.google.api-client:google-api-client-android:1.23.0'
implementation 'com.google.apis:google-api-services-people:v1-rev299-1.23.0'

Проблема возникает, когда я собираю тип сборки 'release', который использует proguard. Моя сборка терпит неудачу со следующим:

Предупреждение: org.apache.commons.logging.impl.ServletContextCleaner: не удается найти суперкласс или интерфейс javax.servlet.ServletContextListener Предупреждение: org.apache.commons.logging.impl.AvalonLogger: не удается найти указанный класс org.apache.avalon.framework.logger.Logger Предупреждение: org.apache.commons.logging.impl.AvalonLogger: не удается найти указанный класс org.apache.avalon.framework.logger.Logger ... Предупреждение: org.apache.commons.logging.impl.AvalonLogger: не удается найти указанный класс org.apache.avalon.framework.logger.Logger Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Category Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Category Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Priority Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Priority Предупреждение: org.apache.commons.logging.impl.Log4JLogger: не удается найти указанный класс org.apache.log4j.Priority

когда я запускаю ./gradlew app: зависимости я вижу это:

enter image description here

Кажется, что библиотека google-api-client-android зависит от более общей библиотеки google-api-client, которая не подходит для использования Android. И впоследствии содержит не Android-компоненты. Это правильно? Как я могу решить это? Спасибо.

1 Ответ

0 голосов
/ 02 июля 2018

ок, наконец-то нашли решение. Я изменил зависимости gradle библиотеки API клиента Google на:

implementation('com.google.api-client:google-api-client-android:1.23.0') {
    // Exclude artifacts that the Android SDK/Runtime provides.
    exclude(group: 'xpp3', module: 'xpp3')
    exclude(group: 'org.apache.httpcomponents', module: 'httpclient')
    exclude(group: 'junit', module: 'junit')
    exclude(group: 'com.google.android', module: 'android')
}
implementation ('com.google.apis:google-api-services-people:v1-rev299-1.23.0') {
    // Exclude artifacts that the Android SDK/Runtime provides.
    exclude(group: 'xpp3', module: 'xpp3')
    exclude(group: 'org.apache.httpcomponents', module: 'httpclient')
    exclude(group: 'junit', module: 'junit')
    exclude(group: 'com.google.android', module: 'android')
}

Документация Google относительно использования этой библиотеки с Android ужасна ...

...