muestra - errores comunes en android studio
Error de Android Studio 3.0. Migrar configuraciones de dependencia para módulos locales (6)
Con el nuevo complemento, la resolución de dependencia consciente de variantes
implementation project('':MyLib'')
necesita tener tipos de compilación coincidentes exactos. La guía de migración describe esto
Por ejemplo, no es posible hacer que una variante de ''depuración'' consuma una variante de ''liberación'' a través de este mecanismo porque el productor y el consumidor no coincidirían. (En este caso, el nombre ''depuración'' se refiere al objeto de configuración publicado mencionado anteriormente en la sección Dependencias de publicación.) Ahora que publicamos dos configuraciones, una para compilar y otra para tiempo de ejecución, esta antigua forma de seleccionar una configuración realmente no '' No funciona más.
Entonces el viejo método de
releaseCompile project(path: '':foo'', configuration: ''debug'')
ya no funcionará
Ejemplo
Con su ejemplo, esto se vería así:
En la aplicación
build.gradle
:
apply plugin: ''com.android.application''
android {
buildTypes {
debug {}
releaseApp {}
releaseSdk {}
}
...
dependencies {
implementation project('':MyLib'')
}
}
En el módulo / lib ''MyLib''
build.gradle
:
apply plugin: ''com.android.library''
android {
buildTypes {
debug {}
releaseApp {}
releaseSdk {}
}
}
Por lo tanto, el tipo de compilación debe coincidir exactamente , ni más ni menos.
Uso de fallos de compilación
Se puede usar una nueva característica llamada "matchingFallbacks" para definir los tipos de compilación predeterminados si un submódulo no define el tipo de compilación.
Utilice matchFallbacks para especificar coincidencias alternativas para un tipo de compilación determinado (...)
Por ejemplo, si el módulo / lib ''MyLib'' gradle se vería así:
apply plugin: ''com.android.library''
android {
buildTypes {
debug {}
releaseLib {}
}
}
Puede definir lo siguiente en su aplicación
build.gradle
:
apply plugin: ''com.android.application''
android {
buildTypes {
debug {}
releaseApp {
...
matchingFallbacks = [''releaseLib'']
}
releaseSdk {
...
matchingFallbacks = [''releaseLib'']
}
}
...
dependencies {
implementation project('':MyLib'')
}
}
Dimensiones faltantes de sabor
Use missingDimensionStrategy en el bloque defaultConfig para especificar el sabor predeterminado que el complemento debe seleccionar de cada dimensión faltante
android {
defaultConfig {
missingDimensionStrategy ''minApi'', ''minApi18'', ''minApi23''
...
}
}
Recientemente instalé la última versión de Canary de Android Studio que actualmente utiliza el complemento Android Gradle 3.0.0-alpha4.
Ahora recibo un error:
Error:Failed to resolve: Could not resolve project :MyLib.
Required by:
project :app
He leído: migrar configuraciones de dependencia para módulos locales
dependencies { // This is the old method and no longer works for local // library modules: // debugCompile project(path: '':foo'', configuration: ''debug'') // releaseCompile project(path: '':foo'', configuration: ''release'') // Instead, simply use the following to take advantage of // variant-aware dependency resolution. You can learn more about // the ''implementation'' configuration in the section about // new dependency configurations. implementation project('':foo'') // You can, however, keep using variant-specific configurations when // targeting external dependencies. The following line adds ''app-magic'' // as a dependency to only the ''debug'' version of your module. debugImplementation ''com.example.android:app-magic:12.3'' }
Cambié:
releaseCompile project(path: '':MyLib'', configuration: ''appReleaseApp'')
debugCompile project(path: '':MyLib'', configuration: ''appDebug'')
a:
implementation project('':MyLib'')
pero aún tengo este error:
Error:Failed to resolve: Could not resolve project :MyLib.
lib gradle:
apply plugin: ''com.android.library''
android {
publishNonDefault true
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
minSdkVersion 14
targetSdkVersion 25
}
buildTypes {
debug {
...
}
releaseApp {
...
}
releaseSdk {
...''
}
}
flavorDimensions "default"
productFlavors {
flavor1{
...
flavor2{
...
}
flavor3{
...
}
}
}
dependencies {
compile fileTree(include: [''*.jar''], dir: ''libs'')
compile ''com.android.support:appcompat-v7:25.3.1''
compile ''com.android.support:support-v4:25.3.1''
compile ''com.google.code.gson:gson:2.8.0''
compile ''com.google.android.gms:play-services-maps:10.2.6''
compile ''com.google.android.gms:play-services-gcm:10.2.6''
compile ''com.google.android.gms:play-services-location:10.2.6''
}
apply plugin: ''maven''
uploadArchives {
repositories {
mavenDeployer {
repository(url: mavenLocal().url)
}
}
}
aplicación gradle:
apply plugin: ''com.android.application''
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
minSdkVersion 19
targetSdkVersion 25
versionCode 12
versionName "5.0.2"
}
buildTypes {
release {
...
}
debug {
...
}
}
flavorDimensions "default"
productFlavors {
flavor1 {
...
}
flavor2 {
...
}
}
testOptions {
unitTests {
all {
jvmArgs ''-noverify''
systemProperty ''robolectric.logging.enable'', true
}
}
}
}
repositories {
flatDir {
dirs ''libs''
}
}
dependencies {
// releaseCompile project(path: '':MyLib'', configuration: ''appRelease'')
// debugCompile project(path: '':MyLib'', configuration: ''appDebug'')
implementation project('':MyLib'')
compile fileTree(dir: ''libs'', include: [''*.jar''])
androidTestCompile(''com.android.support.test.espresso:espresso-core:2.2.2'', {
exclude group: ''com.android.support'', module: ''support-annotations''
})
compile ''com.google.android.gms:play-services-maps:10.2.6''
compile ''com.google.android.gms:play-services-location:10.2.6''
compile ''com.google.android.gms:play-services-analytics:10.2.6''
compile ''com.google.android.gms:play-services-gcm:10.2.6''
compile ''com.google.code.gson:gson:2.8.0''
compile ''com.android.support:appcompat-v7:25.3.1''
compile ''com.android.support:design:25.3.1''
compile ''com.android.support:support-v4:25.3.1''
compile ''com.android.support:cardview-v7:25.3.1''
compile ''com.android.support:gridlayout-v7:25.3.1''
compile ''com.android.volley:volley:1.0.0''
compile ''com.facebook.stetho:stetho:1.4.1''
compile ''com.facebook.stetho:stetho-okhttp3:1.4.1''
compile ''com.android.support:percent:25.3.1''
compile ''com.android.support:recyclerview-v7:25.3.1''
compile ''com.squareup.picasso:picasso:2.5.2''
testCompile ''junit:junit:4.12''
testCompile ''org.mockito:mockito-core:2.1.0''
testCompile ''org.robolectric:robolectric:3.1.4''
testCompile ''org.assertj:assertj-core:1.7.1''
compile ''com.flipboard:bottomsheet-core:1.5.0''
compile ''com.flipboard:bottomsheet-commons:1.5.0''
compile ''com.android.support.constraint:constraint-layout:1.0.1''
}
apply plugin: ''com.google.gms.google-services''
Por favor ayuda
Después de enfrentar el mismo problema, finalmente declaró exactamente los mismos buildTypes en los archivos build.gradle de la aplicación y los módulos.
En su caso, agregando
buildTypes {
debug {}
releaseApp {}
releaseSdk {}
}
a build.gradle de su módulo debería hacer el truco.
Asegúrese de cambiar cualquier "proyecto de compilación" a "proyecto de implementación" también.
Espero eso ayude
Esta solución funcionó para mí.
Estoy usando Android Studio 3.1.2.
Complemento Android Gradle 3.1.2.
Gradle 4.4.
Tengo un módulo de biblioteca con sabores como
trial
y
premium
.
Como parte del proceso de migración al complemento Android Gradle 3.1.2, agregué una dimensión de sabor
main
al archivo de compilación Gradle de mi módulo de biblioteca.
Por lo tanto, para corregir el error de compilación en el archivo
build.gradle
mi aplicación,
build.gradle
lo siguiente:
debugImplementation project(path: '':library'', configuration: ''premiumDebug'')
releaseImplementation project(path: '':library'', configuration: ''premiumRelease'')
convirtió
implementation project('':library'')
y agregué la siguiente línea a mi bloque
missingDimensionStrategy ''main'', ''premium''
:
missingDimensionStrategy ''main'', ''premium''
Estaba enfrentando el mismo problema, encontré esta página de migración: Crear tipos coincidentes
Afirma:
Seleccionar valores predeterminados para los tipos de compilación faltantes
Si un consumidor configura un tipo de compilación que no lo hace un productor, debe hacer coincidir manualmente el tipo de compilación del consumidor con uno del productor. Por ejemplo, si su módulo de aplicación configura un tipo de compilación "provisional" y su dependencia del módulo de biblioteca, "mylibrary", no lo hace, el complemento de Android arroja el siguiente error de compilación:
Error:Failed to resolve: Could not resolve project :mylibrary.
Required by: project :app
Para resolver este error, debe especificar qué tipo de compilación de "mylibrary" el complemento de Android debe coincidir con el tipo de compilación "provisional" de la aplicación. Puede hacer esto con la propiedad buildTypeMatching en el archivo build.gradle de la aplicación, como se muestra a continuación:
// Add the following to the consumer''s build.gradle file.
android {
...
// Tells the Android plugin to use a library''s ''debug'' build type
// when a ''staging'' build type is not available. You can include
// additional build types, and the plugin matches ''staging'' to the
// first build type it finds from the one''s you specify. That is,
// if ''mylibrary'' doesn''t include a ''debug'' build type either, the
// plugin matches ''staging'' with the producer''s ''release'' build type.
buildTypeMatching ''staging'', ''debug'', ''release''
}
Agregar buildTypeMatching lo arregló para mí sin crear tipos innecesarios en mi biblioteca
Google agregó más instrucciones sobre cómo resolverlo: resuelva errores de compilación relacionados con la coincidencia de dependencias
Causa del error de compilación:
Su aplicación incluye un tipo de compilación que no depende de una dependencia de biblioteca.
Por ejemplo, su aplicación incluye un tipo de compilación "provisional", pero una dependencia incluye solo un tipo de compilación "depurar" y "liberar".
Tenga en cuenta que no hay ningún problema cuando una dependencia de la biblioteca incluye un tipo de compilación que su aplicación no incluye. Esto se debe a que el complemento simplemente nunca solicita ese tipo de compilación de la dependencia.
Resolución
Use matchFallbacks para especificar coincidencias alternativas para un tipo de compilación determinado, como se muestra a continuación:
// In the app''s build.gradle file.
android {
buildTypes {
debug {}
release {}
staging {
// Specifies a sorted list of fallback build types that the
// plugin should try to use when a dependency does not include a
// "staging" build type. You may specify as many fallbacks as you
// like, and the plugin selects the first build type that''s
// available in the dependency.
matchingFallbacks = [''debug'', ''qa'', ''release'']
}
}
}
Hoy también tuve el mismo problema después de migrar a Android Studio 3. El problema es que el gradle no puede resolver ciertas bibliotecas debido a un problema de red. Las razones pueden ser varias. Si trabaja detrás del proxy, debe agregar los parámetros del proxy en el archivo gradle.properties:
systemProp.http.proxyHost=<proxy_host>
systemProp.http.proxyPort=<proxy_port
systemProp.https.proxyHost=<proxy_host>
systemProp.https.proxyPort=<proxy_port>
En mi caso tuve un problema más. Mi empresa utiliza el certificado SSL autofirmado, por lo que la conexión SSL tuvo algún problema. Si lo mismo se aplica también a usted, puede configurar el parámetro nuevamente en el archivo gradle.properties de la siguiente manera:
org.gradle.jvmargs=-Djavax.net.ssl.trustStore="/usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts" -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.keyStorePassword=changeit
Para ser más claro, puede hacer clic en el enlace "Mostrar detalles" en el registro de mensajes en Android Studio. Este registro será más útil para decidir cuál es el verdadero problema.