Los problemas y soluciones encontrados al actualizar a Android Studio3.0, Android Studio3.0 es una gran actualización esta vez. Después de la actualización, descubrí que la compilación ha mejorado enormemente, así como las últimas herramientas de depuración de errores. En resumen, la nueva versión de Google sigue siendo muy sincera.
Problemas encontrados
1 、 saborDimensiones
Registro de errores
Error: Todos los sabores ahora deben pertenecer a una dimensión de sabor con nombre. Obtenga más información en https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
Razón: gradle3.0 necesita usar FlavourDimensions para empaque de múltiples versiones, modifíquelo como sigue:
android {
//…
defaultConfig {
//…
flavourDimensions "dimen"
}
}
Luego realice los cambios correspondientes en productFlavors
productFlavors {
PRODUCTA {dimensión “dimen”}
ProductB {dimensión “dimen”}
}
Configurar múltiples tamaños de sabor
android {
// ...
defaultConfig {
// ...
flavourDimensions "dimenA", "dimenB"
}
}
productFlavors {
productA {dimension "dimenA"}
productB {dimension "dimenB"}
productC {dimension "dimenA"}
}
2.apk llamado
Registro de errores
No se puede establecer el valor de la propiedad de solo lectura 'outputFile' para ApkVariantOutputImpl_Decorated {apkData = Main {type = MAIN, fullName = busDebug, filters = []}} de tipo com.android.build.gradle.internal.api.ApkVariantOutputImpl. Abrir documento
El código anterior:
applicationVariants.all {variant ->
variant.outputs.each {salida ->
def outputFile = output.outputFile
if (outputFile! = null && outputFile.name.endsWith ('. apk')) {
def fileName = “XXX- ree fa u l t Co n fyo g. v e r s i o n Co de - por defecto C onfig. versión C ode - {defaultConfig.versionName} - r e l e a s e Tyo m e ( ) - release T ime () - {productFlavors.name [0]} ”
if (variant.buildType.name == 'release') {
fileName + = '.apk'
} else if (variant.buildType.name == 'debug' ) {
fileName + = '_debug.apk'
} else {
fileName + = '_other.apk'
}
output.outputFile = new File (outputFile.parent, fileName)
}
}
}
Reemplace gradle3.0 cada uno con todos, output.outputFile con outputFileName, no se necesita ningún archivo nuevo, el código modificado:
applicationVariants.all {variant ->
variant.outputs.all {
def fileName = “XXX- ree fa u l t Co n fyo g. v e r s i o n Co de - por defecto C onfig. versión C ode - {defaultConfig.versionName} - r e l e a s e Tyo m e ( ) - release T ime () - {productFlavors.name [0]} ”
if (variant.buildType.name == 'release') {
fileName + = '.apk'
} else if (variant.buildType.name == 'debug' ) {
fileName + = '_debug.apk'
} else {
fileName + = '_other.apk'
}
outputFileName = fileName
}
}
Cabe señalar que al usar Build-> Generate Signed APK ..., el paquete de apk generado se colocará en una carpeta con el nombre del canal.
3. Los procesadores de anotaciones deben declararse explícitamente ahora. Añádalos a la configuración de annotationProcessor.
Registro de errores
Error: la ejecución falló para la tarea ': app: javaPreCompilePreProductDebug'.
Los procesadores de anotaciones deben declararse explícitamente ahora. Se encuentra que las siguientes dependencias de la ruta de clases de compilación contienen un procesador de anotaciones. Agréguelos a la configuración de annotationProcessor.
- butterknife-7.0.1.jar (butterknife-7.0.1.jar)
Alternativamente, configure android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true para continuar con el comportamiento anterior. Tenga en cuenta que esta opción está obsoleta y se eliminará en el futuro.
Consulte https://developer.android.com/r/tools/annotation-processor-error-message.html para obtener más detalles.
修复 方案
android {
//…
defaultConfig {
//…
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
}
}
4.Aapt2Exception
Registro de errores
Error: (113, 5) error: atributo de estilo '@android: attr / windowEnterAnimation' no encontrado.
Error: (113, 5) error: atributo de estilo '@android: attr / windowSalirAnimation' no encontrado.
…
Error: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: error AAPT2: verifique los registros para obtener detalles
Error: java.util.concurrent.ExecutionException: com.android. tools.aapt2.Aapt2Exception: error AAPT2: verifique los registros para obtener detalles
Error: com.android.tools.aapt2.Aapt2Exception: error AAPT2: verifique los registros para obtener detalles
Error: Error de ejecución para la tarea ': aplicación: processPreProductDebugResources'.
No se pudo ejecutar aapt
Solución Agregue el siguiente código en gradle.properties, deshabilite la compilación aapt2
android.enableAapt2 = false
5. Otro
La nueva versión de gradle no necesita configurar buildToolsVersion
las dependencias son así al importar el paquete
{
implementación fileTree (incluir: ['* .jar'], dir: 'libs')
androidTestImplementation ...
proyecto de
implementación ... archivos de
implementación ... implementación ...
testImplementation'junit: junit: 4.12 '
}