Невозможно завершить сборку с диалоговым потоком - PullRequest
0 голосов
/ 31 марта 2020

Я бы хотел использовать последнюю версию диалогового потока в моем приложении Android. Тем не менее, когда я интегрирую его в приложение, я получаю следующую ошибку сборки:

Не удалось выполнить задачу ': app: mergeDebugJavaResource'. Произошла ошибка при выполнении com. android .build.gradle.internal.tasks.Workers $ ActionFacade. Обнаружено более одного файла с независимым от ОС путем 'META-INF / INDEX.LIST'

Чтобы сузить ошибку, я минимизировал зависимости gradle сборки в тестовом проекте до:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.google.cloud:google-cloud-dialogflow:1.0.0'
}

Я все еще получаю ту же ошибку, но, по крайней мере, я знаю, что ошибка не вызвана какой-либо другой ошибкой зависимости у меня в моем реальном проекте. После поиска по связанным вопросам форума я попробовал много предложений решения, таких как добавление packageOptions в свой сборочный билд:

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }

и исключение групп из моей реализации диалогового потока:

implementation('com.google.cloud:google-cloud-dialogflow:1.0.0'){
        exclude group: 'com.google.api.grpc'
}

Последнее решение Предложение действительно помогает мне построить свой gradle, однако, поскольку библиотека dialogflow основана на grp c, большинство классов больше не доступны, что делает всю библиотеку совершенно бесполезной для меня.

Я имею также пытался использовать более старые версии, такие как 0.120.2, что привело только к той же проблеме.

Кто-нибудь из вас уже решил эту проблему? Я также открыт для использования другой библиотеки для связи с моим агентом dialogflow. Для меня просто важно использовать последний API v2 для доступа к диалоговому потоку (у меня уже есть несколько рабочих проектов с v1), так как v1 очень скоро устареет.

Заранее большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 02 апреля 2020

В конце концов я нашел обходной путь, поэтому мне не нужно использовать клиентскую библиотеку dialogflow. Для аутентификации я использую

implementation 'com.google.apis:google-api-services-oauth2:v2-rev99-1.21.0'

, поэтому я могу создать свои учетные данные:

GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream(file)).createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/dialogflow"));

Файловый файл - это файл / ключ JSON, который я получил из своего аккаунта Google ServiceAccount, который назначен моему агенту диалогового потока. С помощью учетных данных я могу получить свой токен доступа:

private String getToken(){
    try {
        credential.refreshToken();
        return credential.getAccessToken();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

С помощью этого токена я могу установить sh HTTPURLConnection и отправить запросы моему агенту диалогового потока:

URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
String token = getToken();
connection.setRequestProperty("Authorization", "Bearer " + token);
connection.setRequestProperty("Accept", "application/json");
connection.connect()
...

Надеюсь, это поможет другим Android разработчикам, которые хотят использовать API-интерфейс dialogflow v2!

Cheers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...