Hi there.
I have this project which I use for some leds:
import java.io.File;
import android.os.Environment;
import android.Manifest; 
import android.os.Build;  
import processing.core.PConstants;
PImage img1;
PImage img2;
PImage img3;
PImage img4;
PImage img5;
PImage img6;
PImage img7;
PImage img8;
PImage img9;
PImage img10;
PImage img11;
String typing = "";
String saved = "";
boolean sett = false; 
String folder_name = "Tiraled";
String text_file = "mac.txt";
int si = 0;
int igri = 0;
String elstr="";
boolean keyboard = false;
boolean interm = false;
boolean error = false;
import ketai.net.bluetooth.*;
import android.os.Bundle;
String device_name = "ESP32";
String device_mac = "";
KetaiBluetooth bt;
void setup() {
  String[] lines = loadStrings("mac.txt");
  device_mac = lines.toString();
  img1 = loadImage("img1.png");
  img2 = loadImage("img2.png");
  img3 = loadImage("img3.png");
  img4 = loadImage("img4.png");
  img5 = loadImage("img5.png");
  img6 = loadImage("img6.png");
  img7 = loadImage("img7.png");
  img8 = loadImage("img8.png");
  img9 = loadImage("img9.png");
  img10 = loadImage("img10.png");
  img11 = loadImage("img11.png");
  fullScreen();
  orientation(LANDSCAPE); 
  noStroke();
  fill(0);
  bt = new KetaiBluetooth(this);
  bt.getPairedDeviceNames();
  bt.start();
  bt.connectToDeviceByName(device_name);
  String awewo = lines[0].toString();
  boolean porque = awewo.contains(":");
  if(porque){
    error=false;
  }
  else{
    error=true;
  }
  print(lines);
  print(porque);
  print(awewo);
}
/*String str = "igri";
      byte[] data = str.getBytes();
      bt.writeToDeviceName(device_name, data);
      delay(1000);
      background(255,0,0);
      image(led1, 670, 100,130,100);
*/
void draw(){
  if(!sett){
  drawmenu();}
  else{setting();}
  int indent = 25;
  if(mousePressed){
  si = mouseX;
  igri = mouseY;
  print(si," ",igri);
  matense(si,igri);
}
  }
void drawmenu(){
  if(error){
    background(255,0,0);
    text("No hay una direccion MAC puesta!",100,300);
    setting();
  }
  else{
  fill(255,255,255);
  background(75,59,59);
  textSize(60);
text("Control", 70, 70);
text("Paleta de colores", 500, 70);
text("Extras", 1200, 70);
  image(img1,100,80,130,130);
  image(img2,100,230,130,130);
  if(interm){
    image(img7,100,370,130,130);
  image(img8,100,510,130,130);
  }
  else{
  image(img3,100,370,130,130);
  image(img4,100,510,130,130);
  }
  image(img5,1200,80,130,130);
  image(img6,1200,230,130,130);
  image(img9,1200,370,130,130);
  image(img10,1200,510,130,130);
  image(img11,1400,30,100,100);
  fill(255,0,0);
  rect(350,80,130,130);
  fill(0,255,0);
  rect(350,230,130,130);
  fill(0,0,255);
  rect(350,370,130,130);
  fill(255,255,255);
  rect(350,510,130,130);
  //a
  fill(247,105,10);
  rect(490,80,130,130);
  fill(31,240,81);
  rect(490,230,130,130);
  fill(31,85,240);
  rect(490,370,130,130);
  //b
  fill(240,167,31);
  rect(630,80,130,130);
  fill(31,172,240);
  rect(630,230,130,130);
  fill(165,23,116);
  rect(630,370,130,130);
  //c
  fill(255,175,0);
  rect(775,80,130,130);
  fill(8,188,206);
  rect(775,230,130,130);
  fill(232,12,133);
  rect(775,370,130,130);
  //d
  fill(234,255,15);
  rect(915,80,130,130);
  fill(9,107,180);
  rect(915,230,130,130);
  fill(255,3,167);
  rect(915,370,130,130);
}
}
void matense(int x, int y){
  String str = "";
  if(x>=100 && x<=230){
  if(y>=80 && y<=220){str="a";}
  if(y>=230 && y<=360){str="b";}
  if(y>=370 && y<=500){if(interm){str="5";}else{str="c";}}
  if(y>=510 && y<=640){if(interm){str="7";}else{str="d";}}
}
  if(x>=490 && x<=620){
    interm = false;
  if(y>=80 && y<=220){str="e";}
  if(y>=230 && y<=360){str="f";}
  if(y>=370 && y<=500){str="g";}
  if(y>=510 && y<=640){str="h";}
}
  if(x>=630 && x<=760){
    interm = false;
  if(y>=80 && y<=220){str="i";}
  if(y>=230 && y<=360){str="j";}
  if(y>=370 && y<=500){str="k";}
  if(y>=510 && y<=640){str="l";}
}
  if(x>=775 && x<=905){
    interm = false;
  if(y>=80 && y<=220){str="m";}
  if(y>=230 && y<=360){str="n";}
  if(y>=370 && y<=500){str="o";}
  if(y>=510 && y<=640){str="p";}
}
  if(x>=915 && x<=1045){
    interm = false;
  if(y>=80 && y<=220){str="q";}
  if(y>=230 && y<=360){str="r";}
  if(y>=370 && y<=500){str="s";}
  if(y>=510 && y<=640){str="t";}
}
  if(x>=350 && x<=480){
    interm = false;
  if(y>=80 && y<=220){str="v";}
  if(y>=230 && y<=360){str="w";}
  if(y>=370 && y<=500){str="x";}
  if(y>=510 && y<=640){str="y";}
}
  if(x>=1200 && x<=1330){
    interm = true;
  if(y>=80 && y<=220){str="2";}
  if(y>=230 && y<=360){str="3";}
  if(y>=370 && y<=500){str="4";}
  if(y>=510 && y<=640){str="8";}
}
if(x>=1400 && x<=1500){
if(y>=30 && y<=130){
  sett = true;
}}
print(str);
      byte[] data = str.getBytes();
      bt.writeToDeviceName(device_name, data);
      delay(100);
}
void setting(){
  int indent = 25;
  fill(0,0,255);
  rect(230,80,815,560);
  fill(255,255,255);
  fill(255,255,0);
  rect(250,200,50,50);
  fill(0,255,0);
  rect(250,150,50,50);
  fill(255,0,0);
  rect(995,150,50,50);
  text("Configuracion",230,140);
  textSize(40);
  fill(0,255,0);
  text("Introduce la nueva Direccion MAC en \n minuscula para conectarse al ESP32. \n La MAC puede ser vista en el \n menu de la pantalla en 'CON' ",230,470);
  textSize(60);
  fill(255,255,255);
  text("Atras",900,600);
  text("Nueva mac: "+ saved,230,400);
  text("<-- Abrir teclado",300,250);
  text("<-- Borrar          Guardar -->",300,200);
  textSize(60);
  text("MAC:" + typing,230,300);
    if(mousePressed){
  si = mouseX;
  igri = mouseY;
}
if(mouseX >= 995 && mouseX <= 1040 && mouseY >= 150 && mouseY <= 200){
  String[] list = split(saved, ' ');
// Writes the strings to a file, each on a separate line
saveStrings("mac.txt", list);
  print("Guardado: "+list[0]);
  String[] sis = loadStrings("mac.txt");
  String awewo = sis[0].toString();
  print(awewo);
}
if (mouseX >= 250 && mouseX <= 300){
  if(mouseY >= 200 && mouseY <= 250){
    if (!keyboard) {
    openKeyboard();
    keyboard = true;   
  }
  }
  if(mouseY >= 150 && mouseY <= 200){
    typing = "";
    saved = "";
    mouseY = mouseY + 100;
  }
}
else {
    closeKeyboard();
    keyboard = false;
  }
if(si>=900&&si<=1045){
  if(igri>=580&&igri<=600){
    sett=false;
  }
}
}
void keyPressed() {
  // If the return key is pressed, save the String and clear it
  if (key == '\n' ) {
    String my_new_str = typing.replace(",", ":");
    saved = my_new_str;
    // A String can be cleared by setting it equal to ""
    typing = ""; 
  } else {
    // Otherwise, concatenate the String
    // Each character typed by the user is added to the end of the String variable.
    typing = typing + key; 
  }
}
And it was working and compiling without a problem a few days. However, today when I needed to make a correction and uploaded it again, it showed this:
> Task :app:mergeExtDexDebug FAILED
ERROR:D8: Cannot fit requested classes in a single dex file (# methods: 114913 > 65536)
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
	at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:151)
	at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:138)
	at com.android.build.gradle.internal.tasks.DexMergingWorkAction.merge(DexMergingTask.kt:859)
	at com.android.build.gradle.internal.tasks.DexMergingWorkAction.run(DexMergingTask.kt:805)
	at com.android.build.gradle.internal.profile.ProfileAwareWorkAction.execute(ProfileAwareWorkAction.kt:74)
	at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
	at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
	at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
	at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:206)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:214)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:61)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, position: null
	at Version.fakeStackEntry(Version_3.1.51.java:0)
	at com.android.tools.r8.internal.oO0.a(SourceFile:68)
	at com.android.tools.r8.internal.oO0.a(SourceFile:28)
	at com.android.tools.r8.internal.oO0.a(SourceFile:27)
	at com.android.tools.r8.internal.oO0.b(SourceFile:3)
	at com.android.tools.r8.D8.run(D8.java:11)
	at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:136)
	... 35 more
Caused by: com.android.tools.r8.internal.b: Cannot fit requested classes in a single dex file (# methods: 114913 > 65536)
	at com.android.tools.r8.internal.il1.a(SourceFile:14)
	at com.android.tools.r8.internal.il1.a(SourceFile:22)
	at com.android.tools.r8.dex.T.a(SourceFile:58)
	at com.android.tools.r8.dex.O.a(SourceFile:7)
	at com.android.tools.r8.dex.e.a(SourceFile:14)
	at com.android.tools.r8.dex.e.c(SourceFile:36)
	at com.android.tools.r8.D8.d(D8.java:187)
	at com.android.tools.r8.D8.b(D8.java:1)
	at com.android.tools.r8.internal.oO0.a(SourceFile:24)
	... 38 more
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:mergeExtDexDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.DexMergingTaskDelegate
   > There was a failure while executing work items
      > A failure occurred while executing com.android.build.gradle.internal.tasks.DexMergingWorkAction
         > com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
           The number of method references in a .dex file cannot exceed 64K.
           Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Can someone explain me what is happening? Apparently, something is using more than the designated 64K on a .DEX file, but I dont have any idea of what that means, or what is a DEX file. Thanks for your help
