---
id: Introduction.Android
title: Detox for Android
---
**Detox for Android currently has several compatibility issues with React Native >= 0.50.** See [#608](https://github.com/wix/detox/issues/608) for details.
## Breaking Changes :warning:
* **In version 10, we've made [Kotlin](https://kotlinlang.org/) mandatory for integrating Detox into your Android project.** In the very least, you must include the Kotlin gradle plugin in your project, as we shall see later on. Nevertheless, this is a breaking change so bear that in mind when upgrading. In any case, worry not of the impact on your app, as - unless you effectively use Kotlin in your own native code, **there will be no impact on the final APK**, in terms of size and methods count.
* **As of version 7** we require Android gradle plugin 3.0.0 or newer. This is a breaking change that makes it impossible to support previous Android gradle plugin versions.
https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html
For older Android gradle plugin support use `detox@6.x.x` instead ([previous setup guide here](https://github.com/wix/detox/blob/97654071573053def90e8207be8eba011408f977/docs/Introduction.Android.md)).
**Note: As a rule of thumb, we consider all old major versions discontinued; We only support the latest Detox major version.**
## Setup :gear:
### 1. Run through the initial _Getting Started_ Guide
- [Getting Started](Introduction.GettingStarted.md)
### 2. Add Detox dependency to an Android project
In `android/settings.gradle` add:
```groovy
include ':detox'
project(':detox').projectDir = new File(rootProject.projectDir, '../node_modules/detox/android/detox')
```
In `android/app/build.gradle` add this to `defaultConfig` section:
```groovy
defaultConfig {
...
testBuildType System.getProperty('testBuildType', 'debug') //this will later be used to control the test apk build type
missingDimensionStrategy "minReactNative", "minReactNative46" //read note
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
...
}
```
Please be aware that the `minSdkVersion` needs to be at least 18.
> ###### Choosing the right build type (in missingDimensionStrategy)
>Detox runs on multiple React Native versions, choose the correct build type to support the version you use.
>**Available versions:**
>
>* `minReactNative44`: Support for React Native 0.44-0.45
>* `minReactNative46`: Support for React Native 0.46+
In `android/app/build.gradle` add this in `dependencies` section:
```groovy
dependencies {
// ...
androidTestImplementation(project(path: ":detox"))
androidTestImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test:rules:1.0.1'
}
```
And in `android/build.gradle` you need to add this under `allprojects > repositories`:
```groovy
buildscript {
repositories {
// ...
google()
}
}
```
### 3. Add Kotlin
If your project does not already use Kotlin, add the Kotlin Gradle-plugin to your classpath in `android/build.gradle`:
```groovy
buildscript {
// ...
ext.kotlinVersion = '1.3.0'
dependencies: {
// ...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
}
}
```
_Note: most guides advise of defining a global `kotlinVersion` constant - as in this example, but that is not mandatory._
**IMPORTANT:** Detox aims at a playing fair with your app, and so it allows you to explicitly define the kotlin version for it to use - so as to align it with your own; Please do so - in your root `android/build.gradle` configuration file:
```groovy
buildscript {
ext.kotlinVersion = '1.3.0' // Your app's version
ext.detoxKotlinVersion = ext.kotlinVersion // Detox' version: should be 1.1.0 or higher!
}
```
***Note that Detox has been tested for version 1.1.0 of Kotlin, and higher!***
### 4. Create Android Test class
You need to add the file `android/app/src/androidTest/java/com/[your.package]/DetoxTest.java` and fill it like [this](../detox/test/android/app/src/androidTest/java/com/example/DetoxTest.java), except that you need to change the package to your projects name.
### 5. Add Android configuration
Add this part to your `package.json`:
```json
"detox" : {
"configurations": {
"android.emu.debug": {
"binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk",
"build":
"cd android && ./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug && cd ..",
"type": "android.emulator",
"name": "Nexus_5X_API_24"
},
"android.emu.release": {
"binaryPath": "android/app/build/outputs/apk/release/app-release.apk",
"build":
"cd android && ./gradlew assembleRelease assembleAndroidTest -DtestBuildType=release && cd ..",
"type": "android.emulator",
"name": "Nexus_5X_API_26"
}
}
}
```
Pay attention to `-DtestBuildType`, set either to `debug` or `release` according to the main apk type.
Following device types could be used to control Android devices:
`android.emulator`. Boot stock SDK emulator with provided `name`, for example `Nexus_5X_API_25`. After booting connect to it.
`android.attached`. Connect to already-attached android device. The device should be listed in the output of `adb devices` command under provided `name`.
Use this type to connect to Genymotion emulator.
### 6. Run the tests
Using the `android.emu.debug` configuration from above, you can invoke it in the standard way.
```sh
detox test -c android.emu.debug
```
## Troubleshooting
### Problem: `Duplicate files copied in ...`
If you get an error like this:
```sh
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
```
You need to add this to the `android` section of your `android/app/build.gradle`:
```groovy
packagingOptions {
exclude 'META-INF/LICENSE'
}
```