diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 777c0a357..5dae6e6e4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -22,13 +22,13 @@ test:
     - ./tools/remove-unused-and-blank-translations.py
     - echo "These are unused or blank translations that should be removed:"
     - git --no-pager diff --exit-code || export EXITVALUE=1
-    - ./gradlew assemble -PdisablePreDex
+    - ./gradlew assemble
     # always report on lint errors to the build log
     - sed -i -e 's,textReport .*,textReport true,' app/build.gradle
-    - ./gradlew lint -PdisablePreDex
-    - ./gradlew pmd -PdisablePreDex
-    - ./gradlew checkstyle -PdisablePreDex
-    - ./gradlew test -PdisablePreDex || {
+    - ./gradlew lint
+    - ./gradlew pmd
+    - ./gradlew checkstyle
+    - ./gradlew test || {
           for log in app/build/reports/*ests/*/*ml; do
               echo "read $log here:";
               (cat "$log" | curl --silent -F 'clbin=<-' https://clbin.com) || true;
@@ -42,12 +42,12 @@ connected10:
   variables:
     AVD_SDK: "10"
   script:
-    - ./gradlew assembleDebug -PdisablePreDex
+    - ./gradlew assembleDebug
     - emulator64-arm -avd fcl-test-$AVD_SDK -no-skin -no-audio -no-window &
     - ./tools/wait-for-emulator
     - adb shell input keyevent 82 &
     - export EXITVALUE=0
-    - ./gradlew connectedCheck -PdisablePreDex || {
+    - ./gradlew connectedCheck || {
         adb -e logcat -d '*:E';
         echo "get the full logcat here:";
         (adb -e logcat -d | curl --silent -F 'clbin=<-' https://clbin.com) || true;
@@ -64,14 +64,14 @@ connected24:
   variables:
     AVD_SDK: "24"
   script:
-    - ./gradlew assembleDebug -PdisablePreDex
+    - ./gradlew assembleDebug
     - android list avd
     - emulator64-arm -avd fcl-test-$AVD_SDK -no-audio -no-window &
     - ./tools/wait-for-emulator
     - adb shell input keyevent 82 &
     - adb devices
     - export EXITVALUE=0
-    - ./gradlew connectedCheck -PdisablePreDex || {
+    - ./gradlew connectedCheck || {
         adb -e logcat -d '*:E';
         echo "get the full logcat here:";
         (adb -e logcat -d | curl --silent -F 'clbin=<-' https://clbin.com) || true;
diff --git a/app/build.gradle b/app/build.gradle
index 11e391011..b8a9eff01 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -182,6 +182,9 @@ if (!hasProperty('sourceDeps')) {
     }
 }
 
+def isCi = "true".equals(System.getenv("CI"))
+def preDexEnabled = "true".equals(System.getProperty("pre-dex", "true"))
+
 android {
     compileSdkVersion 24
     buildToolsVersion '25.0.2'
@@ -211,6 +214,13 @@ android {
         cruncherEnabled = false
     }
 
+    dexOptions {
+        // Improve build server performance by allowing disabling of pre-dexing
+        // see http://tools.android.com/tech-docs/new-build-system/tips#TOC-Improving-Build-Server-performance
+        // Skip pre-dexing when running on CI or when disabled via -Dpre-dex=false.
+        preDexLibraries = preDexEnabled && !isCi
+    }
+
     defaultConfig {
         versionCode 1000011
         versionName getVersionName()
diff --git a/build.gradle b/build.gradle
index 749954481..0c5d82fb1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,19 +8,3 @@ buildscript {
         classpath files('libs/gradle-witness.jar')
     }
 }
-
-/**
- * Improve build server performance by allowing disabling of pre-dexing
- * (see http://tools.android.com/tech-docs/new-build-system/tips#TOC-Improving-Build-Server-performance.)
- */
-project.ext.preDexLibs = !project.hasProperty('disablePreDex')
-
-subprojects {
-  project.plugins.whenPluginAdded { plugin ->
-    if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name)) {
-      project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
-    } else if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) {
-      project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
-    }
-  }
-}