You need to add this into your android/settings.gradle:
include ':detox'
project(':detox').projectDir = new File(rootProject.projectDir, '../node_modules/detox/android/detox')In case your project’s RN version is at least 0.46.0 change the oldOkhttp configuration string to newOkhttp, in the
app/build.gradlehere.
In the android/app/build.gradle you need to add this into your dependencies section:
androidTestCompile(project(path: ":detox", configuration: "newOkhttpDebug"), {
exclude group: 'com.android.support', module: 'support-annotations'
})Please be aware that the minSdkVersion needs to be at least 18.
You need to add this to android/build.gradle into buildscript > dependencies:
classpath 'com.palantir:jacoco-coverage:0.4.0'And in the same file you need to add this under allprojects > repositories:
maven {
url "https://maven.google.com"
}4. Introduce Espresso test runner
Detox Android is a standard Android integration test. Although, it is completely asynchronous.
It uses Espresso internally, therefore you have to use an AndroidJUnitRunner as your test runner (or a subclass of it).
For this you need to modify your android/app/build.gradle:
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}You need to add the file android/app/src/androidTest/java/com/[your.package]/DetoxTest.java and fill it like this, expect that you need to change the package to your projects name.
Add this part to your package.json:
"detox": {
"configurations": {
"android.emu.debug": {
"binaryPath": "android/app/build/outputs/apk/app-debug.apk",
"build": "pushd android && ./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug && popd",
"type": "android.emulator",
"name": "Nexus_5X_API_25"
}
}
}Using the android.emu.debug configuration from above, you can invoke it in the standard way.
detox test -c android.emu.debugIf you get an error like this:
Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSEYou need to add this to the android section of your android/app/build.gradle:
packagingOptions {
exclude 'META-INF/LICENSE'
}You might encounter version conflicts with dependencies, an error may look like this:
Conflict with dependency 'com.fasterxml.jackson.core:jackson-core'. Resolved versions for app (2.8.7) and test app (2.2.3) differ. See http://g.co/androidstudio/app-test-app-conflict for details.The easiest way to solve these is by replacing the dependency, meaning excluding the dependency versions from detox and re-adding the versions that caused the conflict.
You need to replace some parts in the android/app/build.gradle:
androidTestCompile(project(path: ":detox", configuration: "newOkhttpDebug"), {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.fasterxml.jackson.core', module: 'jackson-core'
exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
})
androidTestCompile 'com.fasterxml.jackson.core:jackson-core:2.8.7'
androidTestCompile 'com.fasterxml.jackson.core:jackson-databind:2.8.7'