Can't Install Using Maven for Android Studio

Is it still possible to use the SDK on Android, when trying to install the library using maven from the link provided here: https://developer.genesys.cloud/api/rest/client-libraries/java/#using-the-sdk.

I get the following message: Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve com.mypurecloud:platform-client-v2:146.0.2.

build.gradle file:

plugins {
Preformatted text`id 'com.android.application'
}

android {
    compileSdk 32

    defaultConfig {
        applicationId "com.example.test"
        minSdk 30
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    implementation 'com.mypurecloud:platform-client-v2:146.0.2'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

I have also downloaded the jar library and added it that way, but I get a lot of fatal exceptions. For example I get java.lang.NoClassDefFoundError: Failed resolution of: Lcom/fasterxml/jackson/databind/ObjectMapper; when executing: ApiClient apiClient = ApiClient.Builder.standard().withBasePath(region).build();

Are there any tutorials on how to set up the SDK on Android Studio?

Hi,

We have updated some of the Java SDK dependencies in last few months and that might have caused some incompatiblities with Android. We'll look into this and issue a fix for Android.

I'm not certain what version the changes were added in but an older version such as 100.x.x should be more likely to work with Android.

Hello,

I was able to to implement 100.x.x but I get a lot of fatal exceptions when trying to run anything
Are there any resources available on how to use the SDK with Android?

build.gradle:

plugins {
    id 'com.android.application'
}

android {

    packagingOptions {
        pickFirst "META-INF/LICENSE"
        pickFirst "META-INF/*.properties"
        pickFirst "META-INF/AL2.0"
        pickFirst "META-INF/LGPL2.1"
        pickFirst "META-INF/DEPENDENCIES"
        pickFirst "META-INF/LICENSE.md"
        pickFirst "META-INF/NOTICE.md"
        pickFirst "META-INF/INDEX.LIST"
    }

    compileSdk 32

    defaultConfig {
        applicationId "com.example.test"
        minSdk 30
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    implementation ('com.mypurecloud:platform-client-v2:100.0.0')
    implementation 'net.sourceforge.htmlunit:htmlunit:2.15'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

configurations {
    all {
        exclude group: "com.google.guava"
        exclude group: "javax.xml.bind"
    }
}

MainActivity:

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.mypurecloud.sdk.v2.ApiClient;
import com.mypurecloud.sdk.v2.ApiException;
import com.mypurecloud.sdk.v2.Configuration;
import com.mypurecloud.sdk.v2.api.UsersApi;
import com.mypurecloud.sdk.v2.model.User;
import com.mypurecloud.sdk.v2.model.UserMe;
import com.mypurecloud.sdk.v2.PureCloudRegionHosts;

import androidx.appcompat.app.AppCompatActivity;


public class MainActivity extends AppCompatActivity {

    String clientId = "";
    String clientSecret = "";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        PureCloudRegionHosts region = PureCloudRegionHosts.eu_west_1;
        ApiClient apiClient = ApiClient.Builder.standard().withBasePath(region).build();

    }
}

Fatal Exception(When App Opens):

2022-03-30 23:22:23.929 4036-4036/com.example.test E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.test, PID: 4036
    java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar!classes4.dex)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
        at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:966)
        at com.mypurecloud.sdk.v2.connector.apache.ApacheHttpClientConnectorProvider.create(ApacheHttpClientConnectorProvider.java:62)
        at com.mypurecloud.sdk.v2.connector.ApiClientConnectorLoader.load(ApiClientConnectorLoader.java:22)
        at com.mypurecloud.sdk.v2.ApiClient.buildHttpConnector(ApiClient.java:167)
        at com.mypurecloud.sdk.v2.ApiClient.<init>(ApiClient.java:127)
        at com.mypurecloud.sdk.v2.ApiClient.<init>(ApiClient.java:64)
        at com.mypurecloud.sdk.v2.ApiClient$Builder.build(ApiClient.java:833)
        at com.example.test.MainActivity.onCreate(MainActivity.java:30)
        at android.app.Activity.performCreate(Activity.java:7994)
        at android.app.Activity.performCreate(Activity.java:7978)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2022-03-30 23:30:02.336 4207-4207/com.example.test E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.test, PID: 4207
    java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar!classes4.dex)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
        at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:966)
        at com.mypurecloud.sdk.v2.connector.apache.ApacheHttpClientConnectorProvider.create(ApacheHttpClientConnectorProvider.java:62)
        at com.mypurecloud.sdk.v2.connector.ApiClientConnectorLoader.load(ApiClientConnectorLoader.java:22)
        at com.mypurecloud.sdk.v2.ApiClient.buildHttpConnector(ApiClient.java:167)
        at com.mypurecloud.sdk.v2.ApiClient.<init>(ApiClient.java:127)
        at com.mypurecloud.sdk.v2.ApiClient.<init>(ApiClient.java:64)
        at com.mypurecloud.sdk.v2.ApiClient$Builder.build(ApiClient.java:833)
        at com.example.test.MainActivity.onCreate(MainActivity.java:30)
        at android.app.Activity.performCreate(Activity.java:7994)
        at android.app.Activity.performCreate(Activity.java:7978)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2022-03-30 23:40:18.528 4294-4294/com.example.test E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.test, PID: 4294
    java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar!classes4.dex)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
        at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:966)
        at com.mypurecloud.sdk.v2.connector.apache.ApacheHttpClientConnectorProvider.create(ApacheHttpClientConnectorProvider.java:62)
        at com.mypurecloud.sdk.v2.connector.ApiClientConnectorLoader.load(ApiClientConnectorLoader.java:22)
        at com.mypurecloud.sdk.v2.ApiClient.buildHttpConnector(ApiClient.java:167)
        at com.mypurecloud.sdk.v2.ApiClient.<init>(ApiClient.java:127)
        at com.mypurecloud.sdk.v2.ApiClient.<init>(ApiClient.java:64)
        at com.mypurecloud.sdk.v2.ApiClient$Builder.build(ApiClient.java:833)
        at com.example.test.MainActivity.onCreate(MainActivity.java:30)
        at android.app.Activity.performCreate(Activity.java:7994)
        at android.app.Activity.performCreate(Activity.java:7978)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Hi,

I'm sorry to hear that. As far as I'm aware, the only android specific documentation is available in the README: https://github.com/MyPureCloud/platform-client-sdk-java#android-support

This is an area we will aim to improve as we carry out a refresh of the SDKs.

1 Like

Have you tried using the OkHttpClientConnectorProvider? It is recommended for Android: https://github.com/MyPureCloud/platform-client-sdk-java#setting-the-http-connector.
The exceptions you are getting appear to be coming from the Apache HTTP client.

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.