android - omc - java.lang.IllegalStateException: archivos Dex: configurando la extensión.DEX solo para archivos.CLASS
gitlab>} (8)
Como se mencionó anteriormente, @mixel cleaning hace el trabajo. Pero como una opción para no hacerlo manualmente, simplemente agregue la tarea ''limpia'' de gradle a la configuración de ejecución de la aplicación para que se realice todo el tiempo antes del lanzamiento. Por supuesto, puede ralentizar un poco todo el proceso.
Yo construyo el proyecto en gitlab ci.
./gradlew assembleDebug --stacktrace
ya veces arroja un error:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task '':app:transformClassesWithDexBuilderForDebug''.
> com.android.build.api.transform.TransformException: java.lang.IllegalStateException: Dex archives: setting .DEX extension only for .CLASS files
En mi pc local funciona correctamente.
la versión kotlin es 1.2
multidex está habilitado
¿Cuál es la razón de este error?
La configuración para multidexing no solucionó este problema para mí.
Sin embargo, se me ocurrió una resolución ... de clases. Básicamente se trataba de crear una solicitud de extracción para una segunda rama en la misma confirmación que la compilación que estaba fallando. La creación de esta solicitud de extracción tuvo éxito, y luego Bitbucket pensó que la solicitud de extracción original estaba bien y nos permitió fusionarnos, aunque no habíamos realizado cambios en esa rama. Hay algunas rarezas inexplicables allí, pero la técnica funcionó.
Así es como lo hice:
Supongamos que la rama que está fallando se llama bad-branch
.
Creé una nueva rama llamada bad-branch-copy
en la confirmación que era común entre bad-branch
y el develop
. Luego fusioné bad-branch
bad-branch-copy
bad-branch
bad-branch-copy
. El resultado final de esto fue un avance rápido, de modo que bad-branch-copy
terminó en el mismo compromiso que bad-branch
. Esperaba un compromiso por separado, así que este resultado me sorprendió, pero de todos modos me estaba agarrando a los popotes y seguí adelante.
Luego puse la bad-branch-copy
en GitHub y creé una solicitud de extracción desde bad-branch-copy
para develop
. Esto desencadenó una compilación en el bad-branch-copy
develop
bad-branch-copy
->, que tuvo éxito.
En ese momento, buddybuild mostró una compilación exitosa en bad-branch-copy
-> develop
y aún mostró una falla en bad-branch
-> el develop
. Sin embargo, Bitbucket mostró una compilación exitosa en la solicitud de extracción para bad-branch
. Sí, eso es correcto: Buddybuild mostró un fracaso, pero Bitbucket dijo que estaba bien.
Entonces pudimos fusionar la solicitud de extracción de bad-branch
y todo estaba bien con el mundo. Por favor, no me preguntes por qué, no te responderé. :)
Creo que lo mismo se podría lograr con
git checkout bad-build
git checkout -b bad-build-copy
git push origin bad-build-copy
seguido de la creación de una solicitud de extracción para la copia de creación incorrecta.
La respuesta anterior es principalmente correcta, pero en mi caso, recibo esta excepción cuando creo el mismo nombre de archivo java y kotlin y luego borro uno de ellos.
Las soluciones son: solo compilar -> Limpiar proyecto mi proyecto y funciona. Y mi proyecto también habilitó multiDex .
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
Lo que resolvió el problema para mí fue agregar manualmente todos los archivos en conflicto manualmente. Por ejemplo en mi archivo de gradle tuve:
implementation ''com.android.support:support-compat:27.1.1''
estaba subrayado con leer. Floté sobre la línea y Android Studio dijo que había un conflicto con otro archivo que usaba una versión menor. El error fue similar a,
come.android.support:support-annotations:26.0.1 conflictos / versiones de mezcla con 27.1.1.
Me dio los nombres de los archivos y los agregué manualmente con la versión correspondiente para que todos coincidan
compile ''com.android.support:support-annotations:27.1.1''
compile ''com.android.support:support-compat:27.1.1''
compile ''com.android.support:support-core-ui:27.1.1''
compile ''com.android.support:animated-vector-drawable:27.1.1''
compile ''com.android.support:appcompat-v7:27.1.1''
compile ''com.android.support:design:27.1.1''
Parece que encontré la solución. En el momento de la construcción, Gradle mostraba advertencias para mí:
Configuration ''compile'' in project '':app'' is deprecated. Use ''implementation'' instead.
app: ''androidProcessor'' dependencies won''t be recognized as kapt annotation processors. Please change the configuration name to ''kapt'' for these artifacts: ''com.arello-mobile:moxy-compiler:1.5.3'' and apply the kapt plugin: "apply plugin: ''kotlin-kapt''".
Hice un error ortográfico y olvidé eliminar el innecesario AnotaciónProcessor para la biblioteca:
annotationProcessor "com.arello-mobile:moxy-compiler:$moxyVersion"
kapt "com.arello-mobile:moxy-compiler:$moxyVersion"
Así que quité la primera línea.
Después de eso apliqué el complemento kapt apply plugin: ''kotlin-kapt''
y apply plugin: ''kotlin-kapt''
algunos errores de compilación en el código que sigue.
Después de todo, me di cuenta de que había olvidado reemplazar la compile
con la implementation
en algunos lugares. Es raro pero sin él la construcción no funcionó.
Estos cambios arreglan mi error de compilación.
Por favor encuentre aquí la solución a este problema,
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
compile ''com.android.support:multidex:1.0.0''
}
Pude hacer desaparecer el problema cerrando y reiniciando Android Studio. Quizás incluso un Proyecto de Reconstrucción lo habría hecho también (aunque no lo intentó).
./gradlew clean
corrigió el mismo error para mí.