---
updatedAt: 2026-03-30T09:17:58.000Z
agentTools:
  projectIndex: https://developers.bazaarvoice.com/v1.0-MobileSDK/llms.txt
---

# Installation

This guide shows you how to install and import the Bazaarvoice Mobile SDK into your Android app.

# Prerequisites

* Signed Data Usage Amendment, if not already in place
* Minimum Android deployment target of 5.0 (API Level 21)
* [Android Studio](https://developer.android.com/sdk/index.html)
* Your Client ID
* API key(s) for Bazaarvoice products you have enabled

# Versioning

The Mobile SDK for Android is versioned so that we can release new features, bug fixes and improvements without compromising the stability of applications using older versions.

This table summarises the major version releases. For more information refer to the [Mobile SDK for Android Github repo](https://github.com/bazaarvoice/bv-android-sdk/releases).

[block:parameters]
{
  "data": {
    "h-0": "Version",
    "h-1": "Release Date",
    "h-2": "Status",
    "0-0": "8.19.0",
    "0-1": "May 23, 2025",
    "0-2": "<span style=\"background-color: #ADD8E6; color: #333;\">Latest</span>",
    "1-0": "8.16.0",
    "1-1": "May 23, 2024",
    "1-2": "<span style=\"background-color: #FFFFE0; color: #333;\">Supported</span>",
    "2-0": "8",
    "2-1": "Oct 01, 2018",
    "2-2": "<span style=\"background-color: #FFFFE0; color: #333;\">Supported</span>",
    "3-0": "7",
    "3-1": "Jun 18, 2018",
    "3-2": "<span style=\"background-color: #FFFFE0; color: #333;\">Supported</span>",
    "4-0": "6",
    "4-1": "Jan 23, 2017",
    "4-2": "<span style=\"background-color: #FFFFE0; color: #333;\">Supported</span>",
    "5-0": "5",
    "5-1": "Oct 31, 2016",
    "5-2": "<span style=\"background-color: #FFFFE0; color: #333;\">Supported</span>",
    "6-0": "4",
    "6-1": "May 4, 2016",
    "6-2": "<span style=\"background-color: #FF7F7F; color: #333;\">Deprecated</span>",
    "7-0": "3",
    "7-1": "Mar 8, 2016",
    "7-2": "<span style=\"background-color: #FF7F7F; color: #333;\">Deprecated</span>",
    "8-0": "2",
    "8-1": "Jan 31, 2013",
    "8-2": "<span style=\"background-color: #FF7F7F; color: #333;\">Deprecated</span>",
    "9-0": "1",
    "9-1": "Jul 26, 2012",
    "9-2": "<span style=\"background-color: #FF7F7F; color: #333;\">Deprecated</span>"
  },
  "cols": 3,
  "rows": 10,
  "align": [
    null,
    null,
    null
  ]
}
[/block]

<span style="background-color: #ADD8E6; color: #333;">Latest</span>

This is newest version. **New applications SHOULD use the most recent release of this version.**

<span style="background-color: #FFFFE0; color: #333;">Supported</span>

Supported versions continue to receive security and bug fixes, but applications using these versions should be upgraded to the latest version when possible to take advantage of new features. **New applications should not use these versions.**

<span style="background-color: #FF7F7F; color: #333;">Deprecated</span>

These versions should not be expected to return data and/or may experience service degradation. Documentation specific to these versions may no longer be available. **These versions should not be used by any applications.**

# Installing with Gradle

> 📘 For manual installation using archive builds (.aar), use the latest archive version on the [BVSDK Maven repository](https://repo1.maven.org/maven2/com/bazaarvoice/bvandroidsdk/).

Add the following dependencies to include the Maven Central repository and add Bazaarvoice Mobile SDK modules. You only need to add the dependencies for the products you have an API key for.

```
dependencies {  
  implementation 'com.bazaarvoice.bvandroidsdk:analytics:{BV_SDK_VERSION}.+'  
  implementation 'com.bazaarvoice.bvandroidsdk:auth-iovation:{BV_SDK_VERSION}.+'  
  implementation 'com.bazaarvoice.bvandroidsdk:conversations:{BV_SDK_VERSION}.+'  
  implementation 'com.bazaarvoice.bvandroidsdk:curations:{BV_SDK_VERSION}.+'  
  implementation 'com.bazaarvoice.bvandroidsdk:curations-ui:{BV_SDK_VERSION}.+'  
  implementation 'com.bazaarvoice.bvandroidsdk:location:{BV_SDK_VERSION}.+'  
  implementation 'com.bazaarvoice.bvandroidsdk:recommendations:{BV_SDK_VERSION}.+'  
  implementation 'com.bazaarvoice.bvandroidsdk:store-notifications:{BV_SDK_VERSION}.+'
  implementation 'com.bazaarvoice.bvandroidsdk:common:{BV_SDK_VERSION}.+' 
}  
repositories {  
  mavenCentral()  
}
```

Replace the `{tokens}`, including brackets, with the appropriate values. Refer to the [Installation](/v1.0-MobileSDK/docs/android-installation#versioning) guide for `{BV_SDK_VERSION}`.

# Downloading the iovation SDK

Refer to the [Device Fingerprinting topic](/v1.0-MobileSDK/docs/android-device-fingerprinting) to download and add the iovation SDK to your project. This SDK is required to ensure authenticity in user-generated content.

***

# Configuring the BVSDK

Once you have installed the source code for the SDK, you are now ready to initialize the `BVSDK` with your API key(s) and environment (staging versus production).

## 1. Select configuration options

The table below will generate a configuration file for your SDK. The values you set will generate the necessary script and Mobile SDK intialization code to get you up and running quickly.

Each client application should have its own API key. If you need to generate a new key for Conversations please see [Conversations Requesting API Keys](/v1.0-ConversationsAPI/docs/api-key-management).

For all other API keys or if you don't know your client ID, contact [Bazaarvoice Support](/v1.0-MobileSDK/docs/getting-help) or your implementation team.

[block:html]
{
  "html": "<!-- Form Section -->\n<form class=\"form-inline\">\n    <div class=\"form-group\">\n        <label for=\"clientId\">Enter your Client ID:</label>\n        <input type=\"text\" class=\"edit_ClientID\" id=\"clientId\" placeholder=\"your client name, such as bazaarvoice\" size=\"40\"/>\n    </div>\n</form>\n<br>\n\n<!-- Table Section -->\n<table class=\"table parameters\" id=\"keyTable\">\n    <tbody>\n        <tr>\n            <th>Products</th>\n            <th>Production</th>\n            <th>Staging</th>\n        </tr>\n        <tr>\n            <th>Curations</th>\n            <td>\n                <input class=\"prodKeyText\" data-type=\"apiKey\" data-config-key=\"apiKeyCurations\" title=\"Curations Production API Key\" placeholder=\"API Key\" style=\"width:100%\" type=\"text\">\n            </td>\n            <td>\n                <input class=\"stagingKeyText\" data-type=\"apiKey\" data-config-key=\"apiKeyCurations\" title=\"Curations Staging API Key\" placeholder=\"API Key\" style=\"width:100%\" type=\"text\">\n            </td>\n        </tr>\n        <tr>\n            <th>Conversations</th>\n            <td>\n                <input class=\"prodKeyText\" data-type=\"apiKey\" data-config-key=\"apiKeyConversations\" title=\"Conversations Production API Key\" placeholder=\"API Key\" style=\"width: 100%;\" type=\"text\">\n            </td>\n            <td>\n                <input class=\"stagingKeyText\" data-type=\"apiKey\" data-config-key=\"apiKeyConversations\" title=\"Conversations Staging API Key\" placeholder=\"API Key\" style=\"width: 100%;\" type=\"text\">\n            </td>\n        </tr>\n        <tr>\n            <th>Conversations for Stores</th>\n            <td>\n                <input class=\"prodKeyText\" data-type=\"apiKey\" data-config-key=\"apiKeyConversationsStores\" title=\"Conversations for Stores Production API Key\" placeholder=\"API Key\" style=\"width:100%\" type=\"text\">\n            </td>\n            <td>\n                <input class=\"stagingKeyText\" data-type=\"apiKey\" data-config-key=\"apiKeyConversationsStores\" title=\"Conversations for Stores Staging API Key\" placeholder=\"API Key\" style=\"width:100%\" type=\"text\">\n            </td>\n        </tr>\n        <tr>\n            <th>Product Recommendations &amp; Advertising</th>\n            <td>\n                <input class=\"prodKeyText\" data-type=\"apiKey\" data-config-key=\"apiKeyShopperAdvertising\" title=\"Shopper Advertising Production API Key\" placeholder=\"API Key\" style=\"width: 100%;\" type=\"text\">\n            </td>\n            <td>\n                <input class=\"stagingKeyText\" data-type=\"apiKey\" data-config-key=\"apiKeyShopperAdvertising\" title=\"Shopper Advertising Staging API Key\" placeholder=\"API Key\" style=\"width:100%\" type=\"text\">\n            </td>\n        </tr>\n        <tr>\n            <th>Analytics Locale</th>\n            <td>\n                <input class=\"prodKeyText\" data-type=\"configValue\" data-config-key=\"analyticsLocaleIdentifier\" title=\"Analytics Locale Production Configuration Value\" placeholder=\"Configuration Value\" style=\"width: 100%;\" type=\"text\">\n            </td>\n            <td>\n                <input class=\"stagingKeyText\" data-type=\"configValue\" data-config-key=\"analyticsLocaleIdentifier\" title=\"Analytics Locale Staging Configuration Value\" style=\"width: 100%;\" placeholder=\"Configuration Value\" type=\"text\">\n            </td>\n        </tr>\n    </tbody>\n</table>\n\n\n<!-- Hidden Div Section -->\n<div class=\"configs-available\" style=\"display: inline-block;\">\n    <p><button class=\"btn btn-large generic-btn\">Download</button></p>\n</div>\n\n<!-- JavaScript Code -->\n<script>\n  document.addEventListener('DOMContentLoaded', function() {\n    var allKeyInputs = document.querySelectorAll('.stagingKeyText, .prodKeyText');\n    var stgKeyInputs = document.querySelectorAll('.stagingKeyText');\n    var prdKeyInputs = document.querySelectorAll('.prodKeyText');\n    var clientIdInput = document.querySelector('.edit_ClientID#clientId');\n    var downloadButton = document.querySelector('.configs-available button');\n\n    allKeyInputs.forEach(function(input) {\n      input.addEventListener('input', updateDownloadHint);\n    });\n\n    clientIdInput.addEventListener('input', updateDownloadHint);\n    downloadButton.addEventListener('click', exportJson);\n\n    function updateDownloadHint() {\n      var clientId = clientIdInput.value;\n      var inputsWithValue = getInputsWithValue(allKeyInputs, 'apiKey');\n      var configsAvailable = document.querySelector('.configs-available');\n      \n      if (inputsWithValue.length > 0 && clientId) {\n        configsAvailable.style.display = 'block';\n      } else {\n        configsAvailable.style.display = 'none';\n      }\n    }\n\n    function exportJson() {\n      var stgKeyInputsWithValue = getInputsWithValue(stgKeyInputs);\n      var prdKeyInputsWithValue = getInputsWithValue(prdKeyInputs);\n\n      if (stgKeyInputsWithValue.length > 0 || prdKeyInputsWithValue.length > 0) {\n        var json = {};\n\n        if (stgKeyInputsWithValue.length > 0) {\n          json.staging = createConfigData(stgKeyInputsWithValue);\n        }\n\n        if (prdKeyInputsWithValue.length > 0) {\n          json.prod = createConfigData(prdKeyInputsWithValue);\n        }\n\n        downloadJson(json);\n      }\n    }\n\n    function createConfigData(keyInputs) {\n      var clientId = clientIdInput.value;\n      var configData = {\"clientId\": clientId};\n\n      keyInputs.forEach(function(input) {\n        configData[input.dataset.configKey] = input.value;\n      });\n\n      return configData;\n    }\n\n    function downloadJson(config) {\n      var data = \"text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(config));\n      var el = document.createElement('a');\n      el.style.display = 'none';\n      el.href = \"data:\" + data;\n      el.download = \"bvsdk_config.json\";\n      document.body.appendChild(el);\n      el.click();\n      document.body.removeChild(el);\n    }\n\n    function getInputsWithValue(inputs, type) {\n      if (!type) { type = 'all'; }\n      return Array.from(inputs).filter(function(input) {\n        if (type === 'all' || input.dataset.type === type) {\n          return input.value.trim() !== '';\n        }\n      });\n    }\n  });\n</script>"
}
[/block]

<br />

> 📘  Enter your Client ID and at least one API key.

 <p>Download your configurations and add them to your assets directory.</p>

 <p>Once this is done you may proceed to step 2.</p>

## 2. Initialize the BVSDK

Create a class that extends `android.app.Application`, and initialize the Mobile SDK using its builder.

You can find a full list of build options in `BVSDK.java`.

```java
      public class MyApplication extends Application {
        @Override
        public void onCreate(){
          super.onCreate();
          // BazaarEnvironment.PRODUCTION reads from bvsdk_config_prod.json
          // BazaarEnvironment.STAGING reads from bvsdk_config_staging.json
          BVSDK.builder(application, BazaarEnvironment.PRODUCTION)
            .logLevel(BVLogLevel.VERBOSE) // Optional: Set the log level. Default level is ERROR.
            .dryRunAnalytics(false)       // Optional: Set analytics to log only, not make a network request. Default is false.
            .okHttpClient(okHttpClient)   // Optional: Use you own okHttpClient instance
            .build();
        }
      }
```

***

# App manifest file

Add the following to your `AndroidManifest.xml` file.

```xml
<!-- set the name of the class for the application entry -->
<application
  android:name=".MyApplication">
</application>
```

***

# Bazaarvoice SDK dependencies

In case your app and our SDK use different versions of the same dependencies, we have compiled a list of the dependencies each of our modules has below to help debug.

If your app pulls in any `com.android.support`, `com.google.android.gms`, or `com.gimbal.android.v2` modules, it would be best for you to look at the specific modules that we request from those packages below. Redeclare them in your build.gradle with the explicit version you would like. This will avoid any 'duplicate class' issues while compiling.

## Analytics

```yaml build.gradle
 implementation "com.squareup.okhttp3:okhttp:X.X.X"
 implementation "com.google.android.gms:play-services-ads:X.X.X"
 implementation "com.android.support:support-annotations:X.X.X"
```

## Common

Inherits from analytics, and adds:

```yaml build.gradle
implementation "com.google.code.gson:gson:X.X.X"
implementation "com.android.support:recyclerview-v7:X.X.X"
```

## Advertising

Inherits from common, no additional dependencies.

## Auth-Iovation

Inherits from conversations, and adds:

```yaml build.gradle
implementation('com.iovation.fraudforce.lib.FraudForce:fraudforce-lib-release-X.X.X:X.X.X@aar')
```

## Conversations

Inherits from common, no additional dependencies.

## Curations

Inherits from common, no additional dependencies.

## Location

Inherits from common, and adds:

```
implementation "com.gimbal.android.v2:gimbal-sdk:X.X"
implementation "com.gimbal.android.v2:gimbal-slf4j-impl:X.X"
implementation "com.android.support:appcompat-v7:X.X.X"
```

## Notifications

Inherits from common, and adds:

```
 implementation "com.android.support:appcompat-v7:X.X.X"
```

## Recommendations

Inherits from common, no additional dependencies.

## Store notifications

Inherits from location, notifications, and conversations. No additional dependencies.

***

# Shrink, Obfuscate, and Optimize your App

Users often avoid downloading apps that seem too large. To help you reduce size of the app, Bazaarvoice Android SDK has now added support for **R8 compiler** to [shrink, obfuscate and optimize your app](https://developer.android.com/studio/build/shrink-code).

When you set the `minifyEnabled` property to `true`, **R8** perform these tasks for your project's release build type. This property is available in the app's `build.gradle` file as shown in the below code snippet:

When set to true, the R8 compiler removes some of the unused code. However, some situations are difficult for R8 to analyze correctly and it might remove code your app actually needs. To fix errors and force R8 to keep certain code, add a `[-keep](https://www.guardsquare.com/manual/configuration/usage#keepoptions)` line in the ProGuard rules file.

```
buildTypes {  
    release {  
        minifyEnabled true  
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'  
    }  
}
```

The Bazaarvoice Android SDK will configure its Proguard rules using [proguard-rules.txt](https://github.com/bazaarvoice/bv-android-sdk/blob/master/bvconversations/proguard-rules.txt) where the keep rules for BVConversations module are defined. Those keep rules tell R8 to not only keep that code in your app's final DEX but also retain its original naming. This is required to preserve the method/field (and its name) as well as the class name intact, and avoid incorrect obfuscation and errors while using BVConversations module.

# Completing installation

After you've completed the above steps, the Bazaarvoice Mobile SDK should be configured and installed. If you encounter difficulties, contact [Bazaarvoice Support](/v1.0-MobileSDK/docs/getting-help) or your implementation team.