FCA Upgrade from v4.2.4 to v6.0.0

This document will walk through upgrading the FIDO Client Adapter (FCA) sample application from HYPR SDK for Android version 4.2.4 to HYPR SDK for Android version 6.0.0. The important changes include:

  • Migrating your application to Android X
  • Updating required dependencies for HYPR SDK for Android

Android X

HYPR Android SDK Version 6.0.0 requires the Android X Support Libraries and replaces the old deprecated Android Support Libraries. You must migrate your existing application to Android X using the Android Studio migration function. We will demonstrate this process on the FCA v4.2.4 sample application.

  1. Click Refactor --> Migrate to Android X.... A popup displays the option to start the migration.
905
  1. Click Migrate. The Refactoring Preview pane displays pending changes at the bottom.
888
  1. Click Do Refactor to start the migration.

Once this process completes, the FCA sample application is migrated to Android X. The authenticators will not work properly until the next step, Dependencies, is finished.

Dependencies

  1. Copy all HYPR SDK included .aar libraries into the libs directory. Following is an example of the libs directory after the files have been copied:
375
  1. Update the dependency modifications in app/build.gradle. Here is an example of the file with modifications:
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'

    // Android
    implementation 'androidx.multidex:multidex:2.0.1'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0'

    // GJON / POJO
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'org.apache.commons:commons-lang3:3.5'

    // RxAndroid
    implementation group: 'io.reactivex.rxjava2', name: 'rxandroid', version: '2.0.2'
    implementation group: 'io.reactivex.rxjava2', name: 'rxjava', version: '2.1.12'
    implementation 'javax.annotation:jsr250-api:1.0'

    // Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'

    // HYPR
    implementation(name: 'HyprCommonAdp', version: "6.0.0", ext: 'aar')
    implementation(name: 'HyprBiometricPromptAdp', version: "6.0.0", ext: 'aar')
    implementation(name: 'HyprPinAdp', version: "6.0.0", ext: 'aar')
    implementation(name: 'HyprFaceVoiceAdp', version: "6.0.0", ext: 'aar')
    implementation(name: 'HyprPalmAdp', version: "6.0.0", ext: 'aar')
    implementation(name: 'HyprSilentAdp', version: "6.0.0", ext: 'aar')
    implementation(name: 'HyprPresenceAdp', version: "6.0.0", ext: 'aar')

    // Fingerprint Biometric Prompt
    implementation 'androidx.biometric:biometric:1.0.1'

    // Sensory SMMA
    implementation(name: 'vvutils', version: "4.1.2.4", ext: 'aar')
    implementation(name: 'datautils', version: "4.1.2.4", ext: 'aar')
    implementation(name: 'smma', version: "4.1.2", classifier: 'android', ext: 'aar')
    implementation(name: 'model', version: "2.1.0", classifier: 'combiner', ext: 'aar')
    implementation(name: 'model', version: "2.1.0", classifier: 'face-pnn', ext: 'aar')
    implementation(name: 'model', version: "2.1.0", classifier: 'voice-tssv-udp_enUS', ext: 'aar')

    // These dependencies are required by Sensory SDK
    implementation 'com.parse.bolts:bolts-android:1.1.4'
    implementation 'org.slf4j:slf4j-api:1.7.25'
    implementation 'commons-io:commons-io:2.5'
    implementation 'com.fasterxml.uuid:java-uuid-generator:3.1.4'

    // Palm
    implementation 'com.intuit.sdp:sdp-android:1.0.6'
    implementation(name: 'palm_sdk_core-4.0.2', ext: 'aar')

    // HYPR Crypto
    implementation(name: "crypto", version: "2.5.0", ext: 'aar') { transitive = true }
    // HYPR ADP
    implementation(name: "THPAgent", version: "2.5.0", ext: 'aar') { transitive = true }
    implementation(name: "TeeClient", version: "2.5.0", ext: 'aar') { transitive = true }
    implementation(name: "caCrypto", version: "2.5.0", ext: 'aar') { transitive = true }
}

Initialization Code Changes

The initialization method signature has changed. The HyprInit.getInstance().setup() method is no longer supported or needed.

HyprInit.getInstance().setup();

The HyprInit.getInstance().initAdp() method signature has changed to HyprInit.getInstance().initTrustData(). Examples of each version are shown below.

4.2.4

void initAdp(@NonNull Context context,
             @NonNull InitTrustDataCallback callback)

6.0.0

void initTrustData(@NonNull final Context context,
                   @NonNull final InitTrustDataCallback callback)

In the FCA sample app MainActivity.java class, the following code changes occurred between 4.2.4 and 6.0.0.

4.2.4

// Setup HyprInit
HyprInit.getInstance().setup();
// Initialize ADP/TrustData
HyprInit.getInstance().initAdp(this, new HyprInit.InitTrustDataCallback() {

6.0.0

// Initialize ADP/TrustData
HyprInit.getInstance().initTrustData(this, new HyprInit.InitTrustDataCallback() {