Использование клиентской библиотеки Google в Android
Я добавил некоторый код, который получает информацию о профиле пользователя из 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 Warning: 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: зависимости, я вижу это:
Кажется, что библиотека google-api-client-android зависит от более общей библиотеки google-api-client, которая не подходит для использования Android. И впоследствии содержит не Android-компоненты. Это правильно? Как я могу решить это? Благодарю.
1 ответ
Хорошо, наконец-то нашел решение. Я изменил зависимости 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')
}
Документация гугла относительно использования этой библиотеки от андроида ужасна...