support - cordova-android version
Ejecutando "cordova build android": no se puede encontrar el atributo android: fontVariationSettings y android: ttcIndex (26)
¡MANERA SÚPER SIMPLE Y CORRECTA DE RESOLVERLO!
Simplemente actualice el SDK y agregue la última versión 2 de Android ... ¡y reinicie la computadora! Hecho...
Ahora tenemos tiempo para hablar sobre autos y deportes ...
Cuando ejecuto
cordova build android --buildConfig xxxx --release
,
cordova build android --buildConfig xxxx --release
el siguiente error:
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:fontVariationSettings
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:ttcIndex
Lo extraño es que uso dos máquinas macOS para la compilación, y obtengo este error solo en una de ellas para el mismo código.
Aquí está la salida de
./gradlew cdvPrintProps
que obtengo en las dos máquinas:
:cdvPrintProps
cdvCompileSdkVersion=26
cdvBuildToolsVersion=27.0.3
cdvVersionCode=null
cdvMinSdkVersion=21
cdvBuildMultipleApks=true
cdvReleaseSigningPropertiesFile=release-signing.properties
cdvDebugSigningPropertiesFile=null
cdvBuildArch=null
computedVersionCode=152045989
computedArmv7VersionCode=1520459892
computedX86VersionCode=1520459894
A continuación se muestra la lista de complementos utilizados:
$ cordova plugins list
cordova-custom-config 5.0.2 "cordova-custom-config"
cordova-fabric-plugin 1.1.10 "cordova-fabric-plugin"
cordova-open-native-settings 1.5.0 "Native settings"
cordova-plugin-app-event 1.2.1 "Application Events"
cordova-plugin-app-version 0.1.9 "AppVersion"
cordova-plugin-camera 2.4.1 "Camera"
cordova-plugin-compat 1.2.0 "Compat"
cordova-plugin-console 1.1.0 "Console"
cordova-plugin-crosswalk-webview 2.4.0 "Crosswalk WebView Engine"
cordova-plugin-datepicker 0.9.2 "DatePicker"
cordova-plugin-device 2.0.1 "Device"
cordova-plugin-email 1.2.7 "EmailComposer"
cordova-plugin-file 4.3.3 "File"
cordova-plugin-file-transfer 1.6.3 "File Transfer"
cordova-plugin-inappbrowser 1.7.2 "InAppBrowser"
cordova-plugin-network-information 1.3.4 "Network Information"
cordova-plugin-secure-storage 2.6.8 "SecureStorage"
cordova-plugin-splashscreen 4.1.0 "Splashscreen"
cordova-plugin-statusbar 2.4.1 "StatusBar"
cordova-plugin-whitelist 1.3.3 "Whitelist"
cordova.plugins.diagnostic 3.9.2 "Diagnostic"
de.appplant.cordova.plugin.local-notification 0.8.5 "LocalNotification"
ionic-plugin-keyboard 2.2.1 "Keyboard"
¿Como puedo solucionar este problema?
Acabo de solucionar este problema yendo a la carpeta plataforma / Android y
project.properties
archivo
project.properties
) y reemplacé
com.android.support:support-v4:+
con
com.android.support:support-v4:27.1.0
.
Agregue las siguientes líneas a sus plataformas / android / build.gradle
configurations.all {
resolutionStrategy {
force ''com.android.support:support-v4:27.1.0''
}
}
Si todavía tiene problemas, intente ejecutar este comando:
cordova plugin add cordova-android-support-gradle-release --fetch
Algunas de sus bibliotecas deberían estar usando
com.android.support:support-v4:+
Encuentra cuál es, con
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath
Y agregue esa biblioteca como módulo si no está utilizando una versión específica en su última actualización (¡También plantee un problema en esa biblioteca!;))
Gracias a @avmatte!
Aquí hay una manera fácil de solucionarlo que persistirá cuando se reconstruya el directorio de la plataforma y no hay necesidad de revisar todos sus complementos para tratar de encontrar un culpable.
Cree un archivo
build-extras.gradle
con estos contenidos:
configurations.all {
resolutionStrategy {
force ''com.android.support:support-v4:27.1.0''
}
}
Luego cree el archivo
after_platform_add/010_copy_build_extras.js
con el siguiente contenido:
#!/usr/bin/env node
var fs = require(''fs'');
var rootdir = process.argv[2];
var android_dir = `${rootdir}/platforms/android`;
var gradle_filename = ''build-extras.gradle'';
var gradle_file = `${rootdir}/${gradle_filename}`;
if (fs.existsSync(android_dir) && fs.existsSync(gradle_file)) {
fs.createReadStream(gradle_file)
.pipe(fs.createWriteStream(`${android_dir}/${gradle_filename}`));
}
Ahora vuelva a crear la plataforma de Android y usará la biblioteca de soporte anclada.
En su archivo
build.gradle
agregue
configurations.all {
resolutionStrategy {
force ''com.android.support:support-v4:27.1.0''
}
}
Y en su archivo
project.properties
cambie
cordova.system.library.3
a
cordova.system.library.3=com.android.support:support-v13:27.+
.
Encontré la solución en Ionic Forum, que fue la única solución que funcionó para mí:
Correr:
plataforma iónica cordova rm android
Correr:
plataforma iónica cordova agregar [email protected]
Correr:
plugin iónico de cordova agregar cordova-plugin-androidx
Correr:
plugin iónico de cordova agregar cordova-plugin-androidx-adapter
Asegúrese de que su gradle.properties tenga:
cdvMinSdkVersion = 19
Asegúrese de que su build.gradle tenga:
project.ext { defaultBuildToolsVersion="28.0.3" //String
defaultMinSdkVersion=19 //Integer - Minimum requirement is Android 4.4
defaultTargetSdkVersion=28 //Integer - We ALWAYS target the latest by default
defaultCompileSdkVersion=28 //Integer - We ALWAYS compile with the latest by default }
Asegúrese de que su config.xml tenga:
<preference name="android-minSdkVersion" value="19" />
que también se maneja en la respuesta : https://.com/a/56656680/839691
Es extraño, pero funciona cuando agrego las siguientes líneas con las mismas versiones.
Estas son mis líneas relacionadas en el archivo
platforms/android/build.gradle
:
dependencies {
compile fileTree(dir: ''libs'', include: ''*.jar'')
// SUB-PROJECT DEPENDENCIES START
debugCompile(project(path: "CordovaLib", configuration: "debug"))
releaseCompile(project(path: "CordovaLib", configuration: "release"))
compile "com.android.support:support-v4:26.+"
compile "com.android.support:appcompat-v7:26.+"
// SUB-PROJECT DEPENDENCIES END
}
// ADDED THESE LINES
configurations.all {
resolutionStrategy.force ''com.android.support:support-v4:26+''
}
En mi proyecto, el problema se produjo debido al complemento ''cordova-plugin-crosswalk-webview''.
Es una entrada duplicada en values.xml en una carpeta llamada
support-compat-28.0.0-alpha1.aar
.
Encontrará este archivo en Windows en
/users/YOURUSERID/.gradle/caches/transforms-1/files-1.1
Una vez dentro de esa carpeta, debe ir algunos niveles más profundos a values.xml .
En ese archivo, busque un elemento
<declare-styleable name="FontFamilyFont>
.
En ese elemento, elimine las CUATRO líneas con
android:
en él.
Después de hacer ese cambio, puedo volver a compilar sin errores.
Estaba enfrentando el mismo error. Hice una investigación completa en el directorio de complementos para com.android.support:support-v4:+ y lo reemplazó con un código de versión estático.
Para mí, com.android.support:support-v4:23.4.0 funcionó bien. No había necesidad de eliminar y volver a agregar la plataforma de Android entonces.
Estaba teniendo el mismo problema de la nada ayer. Comenzó al azar, pero al leerlo, parece que tiene que ver con una actualización como se mencionó anteriormente por @ cpro90. Sin embargo, intenté y no pude encontrar dónde hacer el cambio manual necesario.
Finalmente identifiqué que el problema estaba siendo causado por mi plugin cordova-plugin-crosswalk-webview. En GitHub, encontré el problema en el plugin repro esta mañana, y tenía más de 520 visitas a la hora del almuerzo.
@UNUMObile sugirió lo siguiente en el archivo
build.gradle
para forzar una versión anterior globalmente:
configurations.all {
resolutionStrategy.force ''com.android.support:support-v4:24.0.0''
}
Esto funcionó de inmediato para mí y puede ayudar a otros con otros complementos que también han dependido de ''com.android.support:support-4:<28. La nueva versión 28 parece ser el problema.
Espero que esto ayude a alguien a avanzar.
Google lanzó la nueva versión 28.0.0-alpha1 de com.android.support:support-v4 que agrega 2 nuevos atributos (android: fontVariationSettings y android: ttcIndex). Algunos de los complementos están utilizando las últimas bibliotecas compatibles con Android, lo que resulta en incompatibilidades no deseadas.
Opción 1: Instale el complemento cordova-android-support-gradle-release .
Complemento bien documentado que "alinea varias versiones de las bibliotecas de soporte de Android especificadas por otros complementos a una versión específica". Probado sin ningún comportamiento destructivo.
cordova plugin add cordova-android-support-gradle-release --fetch
Lea la documentación para un conjunto completo de opciones: Readme
Opción 2 : agregue el siguiente fragmento de código en build.gradle en plataformas / android
/**
IMPORTANT - Manually added
Problem: 8 March 2018 - Google released version support-v4:28.0.0-alpha1
which breaks the project with following error: unable to find attribute
android:fontVariationSettings and android:ttcIndex
Effect: Force a specific version of the library
*/
configurations.all {
resolutionStrategy.force ''com.android.support:support-v4:27.1.0''
}
Advertencia: el código en build.gradle se sobrescribirá si elimina / agrega la plataforma Android. Si no desea utilizar el complemento por alguna razón o de alguna manera no funciona para usted, cree un gancho y sobrescriba el archivo cada vez. Verifique el segundo comentario here .
Si el problema persiste, puede intentar:
cordova platform rm android
cordova platform add android
O
Asegúrese de que no tiene una versión anterior de la aplicación instalada en el dispositivo que prueba porque recibirá un error ambiguo cuando intente degradar la versión existente: "INSTALL_FAILED_VERSION_DOWNGRADE" y "UnhandledPromiseRejectionWarning: rechazo de promesa no controlado"
Me encontraba con este problema con react native y fue causado por las siguientes líneas en mi
android/app/build.gradle
:
implementation ("com.google.android.gms:play-services-base:+") {
force = true;
}
implementation ("com.google.android.gms:play-services-maps:+") {
force = true;
}
etc ...
Aparentemente, esto se resolvió con una nueva versión 17.0.0 que rompió mi compilación.
Cambiar el + a 16.0.0 (o 16.0.1 para play-services-base) resolvió mi problema
Me está ocurriendo el mismo error.
Aparentemente, se lanzó una nueva versión de la biblioteca
com.android.support:support-v4
, y el complemento que estoy usando define
com.android.support:support-v4:+
como dependencia en
plugin.xml
.
El signo
+
significa que obtendrá la última versión (28.0.0), que parece ser incompatible con otros complementos.
Pude construir una versión de desarrollo cambiando todas las dependencias del complemento de
com.android.support:support-v4:+
a
com.android.support:support-v4:27.1.0
.
Además,
ionic cordova platform remove android
y
ionic cordova platform add android
.
Espero que ayude, al menos para el desarrollo.
Otro enfoque con la misma solución es crear un gancho. Es persistente (después de reinstalar la plataforma), puede confirmarlo y no requiere volver a agregar la plataforma.
% project% / scripts / android / android-support-version.js
#!/usr/bin/env node
var fs = require(''fs'');
function replace_strings_in_file(filename, replacementsObject) {
if (fs.existsSync(filename)) {
var data = fs.readFileSync(filename, ''utf8'');
Object.keys(replacementsObject).forEach(function (to_replace) {
var replace_with = replacementsObject[to_replace];
data = data.replace(to_replace, replace_with);
});
console.log(data);
fs.writeFileSync(filename, data, ''utf8'');
} else {
console.log(''file not found'');
}
}
module.exports = function (context) {
var rootdir = process.argv[2];
if (rootdir) {
replace_strings_in_file("platforms/android/project.properties", {''com.android.support:support-v4:+'': ''com.android.support:support-v4:27.1.0''});
console.log(''com.android.support version fix'');
}
};
Gancho de inicio en la configuración
% project% / config.xml
...
<platform name="android">
<hook src="scripts/android/android-support-version.js" type="before_build" />
...
Instale la dependencia de fs en su proyecto:
npm i fs --save-dev
Ejecutar compilación:
cordova build android
Para los usuarios de Phonegap Build , como @catu mencionó en un comentario, puede probar Readme cuyo propósito es evitar fallas de compilación causadas al incluir diferentes versiones de las bibliotecas de soporte .
Si está utilizando iónico y obtiene este error, resuélvalo haciendo lo siguiente:
-cordova platform rm android
-cordova platform add android
Puede ser una posible solución
Si realmente solo necesita una solución rápida sobre ese problema para ejecutar su compilación, puede intentar agregar las siguientes líneas en su archivo de plataformas / android / build.gradle:
configurations.all {
resolutionStrategy {
force ''com.android.support:support-v4:27.1.0''
}
}
De todos modos, configurar la versión aquí no es una solución sostenible.
Simplemente ponga siguiente en build-extras.gradle
configurations.all {
resolutionStrategy {
force ''com.android.support:support-v4:27.1.0''
}
}
Solo algunos consejos para el desarrollador de Kotlin:
Si sigue estas respuestas aquí, está seguro de que no tiene la biblioteca
support-v4
en su proyecto pero aún ve este error, eche un vistazo a la biblioteca
ktx
.
Me acabo de dar cuenta de que estoy usando la última versión
1.0.0-alpha1
alpha1 para la biblioteca ktx y aparece este error;
Después de que volví a la versión
0.3
, todo volvió a la normalidad ahora.
Tengo el mismo error pero no en cordova build.
Una nueva versión de
com.android.support:appcompat-v7
y dependencias. Pero la versión incompatible está en el tercer paquete que depende de
com.android.support:appcompat-v7
.Así que no puedo arreglar el tercer paquete con
@avmatte
La solución de
@avmatte
.
Use la solución de @ Sai Teja para encontrar un paquete incompatible:
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath
Luego lo arregló con:
configurations.all {
resolutionStrategy {
force ''com.android.support:support-compat:{the_same_version}''
force ''com.android.support:appcompat-v7:{the_same_version}''
force ''com.android.support:support-core-utils:{the_same_version}''
force ''com.android.support:support-core-ui:{the_same_version}''
force ''com.android.support:support-fragment:{the_same_version}''
force ''com.android.support:support-annotations:{the_same_version}''
...
}
}
El código anterior fuerza la versión de dependencias.
Tuve el mismo problema después de instalar el plugin cordova-plugin-file-opener2. Se resolvió después de hacer: Opción 1: Instalar el complemento cordova-android-support-gradle-release. complemento cordova agregar cordova-android-support-gradle-release --fetch
Tuve el mismo problema y ninguna de las soluciones dadas funcionó para mí. La instalación de la última versión de Android SDK Build-tools (27.0.3) resolvió mi problema.
actualizaciones a la respuesta de @Brad Pitcher:
hooks/copy_build_extras.js
#!/usr/bin/env node
var fs = require(''fs'');
module.exports = function (context) {
var rootdir = context.opts.projectRoot;
var android_dir = `${rootdir}/platforms/android`;
var gradle_filename = ''build-extras.gradle'';
var gradle_file = `${rootdir}/${gradle_filename}`;
if (fs.existsSync(android_dir) && fs.existsSync(gradle_file)) {
fs.createReadStream(gradle_file)
.pipe(fs.createWriteStream(`${android_dir}/${gradle_filename}`));
}
};
config.xml
<platform name="android">
<allow-intent href="market:*" />
<hook src="hooks/copy_build_extras.js" type="before_build" />
</platform>
build-extras.gradle
en el directorio raíz
configurations.all {
resolutionStrategy {
force ''com.android.support:support-v4:27.1.0''
}
}
Esto se debe al complemento compat. Elimine ese complemento si tiene una versión anterior (menos de 1.2.0 ) y configure [email protected]
cordova plugin rm cordova-plugin-compat --force
complemento cordova agregar [email protected]
plataforma cordova rm android
plataforma iónica cordova agregar [email protected]
Trabajando en mi caso. Gracias :)
Simplemente solucione este problema colocando las siguientes líneas de código en el archivo plataformas / android / app / build.gradle, justo después del bloque buildscript {}:
configurations.all {
resolutionStrategy {
force ''com.android.support:support-v4:27.1.0''
}
}