Para solucionar el error Could not resolve project :react-native-iap al generar un build de desarrollo usando la librería react-native-iap tendremos que hacer lo siguiente:

Al generar este build, se puede generar para la tienda de aplicaciones de Amazon o la de Google.
Si no seleccionamos ninguna tienda nos aparecerá el siguiente error:
[stderr] FAILURE: Build failed with an exception. [stderr] * What went wrong: [stderr] Could not determine the dependencies of task ':app:mergeDebugAssets'. [stderr] > Could not resolve all task dependencies for configuration ':app:debugRuntimeClasspath'. [stderr] > Could not resolve project :react-native-iap. [stderr] Required by: [stderr] project :app [stderr] > The consumer was configured to find a runtime of a component, preferably optimized for Android, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug'. However we cannot choose between the following variants of project :react-native-iap: [stderr] - amazonDebugRuntimeElements [stderr] - playDebugRuntimeElements [stderr] All of them match the consumer attributes: [stderr] - Variant 'amazonDebugRuntimeElements' capability QuieroLibros:react-native-iap:unspecified declares a runtime of a component, preferably optimized for Android, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug': [stderr] - Unmatched attributes: [stderr] - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'amazonDebug' but the consumer didn't ask for it [stderr] - Provides a library but the consumer didn't ask for it [stderr] - Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it [stderr] - Provides attribute 'store' with value 'amazon' but the consumer didn't ask for it [stderr] - Variant 'playDebugRuntimeElements' capability QuieroLibros:react-native-iap:unspecified declares a runtime of a component, preferably optimized for Android, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug': [stderr] - Unmatched attributes: [stderr] - Provides attribute 'com.android.build.gradle.internal.attributes.VariantAttr' with value 'playDebug' but the consumer didn't ask for it [stderr] - Provides a library but the consumer didn't ask for it [stderr] - Provides attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but the consumer didn't ask for it [stderr] - Provides attribute 'store' with value 'play' but the consumer didn't ask for it [stderr] The following variants were also considered but didn't match the requested attributes: [stderr] - Variant 'amazonDebugApiElements' capability QuieroLibros:react-native-iap:unspecified declares a component, preferably optimized for Android, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug': [stderr] - Incompatible because this component declares an API of a component and the consumer needed a runtime of a component [stderr] - Variant 'amazonReleaseApiElements' capability QuieroLibros:react-native-iap:unspecified declares a component, preferably optimized for Android: [stderr] - Incompatible because this component declares an API of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release' and the consumer needed a runtime of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug' [stderr] - Variant 'amazonReleaseRuntimeElements' capability QuieroLibros:react-native-iap:unspecified declares a runtime of a component, preferably optimized for Android: [stderr] - Incompatible because this component declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release' and the consumer needed a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug' [stderr] - Variant 'playDebugApiElements' capability QuieroLibros:react-native-iap:unspecified declares a component, preferably optimized for Android, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug': [stderr] - Incompatible because this component declares an API of a component and the consumer needed a runtime of a component [stderr] - Variant 'playReleaseApiElements' capability QuieroLibros:react-native-iap:unspecified declares a component, preferably optimized for Android: [stderr] - Incompatible because this component declares an API of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release' and the consumer needed a runtime of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug' [stderr] - Variant 'playReleaseRuntimeElements' capability QuieroLibros:react-native-iap:unspecified declares a runtime of a component, preferably optimized for Android: [stderr] - Incompatible because this component declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release' and the consumer needed a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug' [stderr] * Try: [stderr] > Run with --stacktrace option to get the stack trace. [stderr] > Run with --info or --debug option to get more log output. [stderr] > Run with --scan to get full insights. [stderr] * Get more help at https://help.gradle.org [stderr] BUILD FAILED in 3m 1s
Para solucionar el error, tenemos que ir a la carpeta Android de nuestro proyecto. Si no la tienes generada, aquí te enseño cómo generarla (https://devcodelight.com/generar-carpetas-de-codigo-nativo-android-ios-en-react-native-con-expo)
Ahora vamos a android>app>build.gradle y añadimos esta línea dentro de defaultConfig
missingDimensionStrategy 'store', 'play'
Quedando de esta forma:
defaultConfig {
applicationId 'app.example'
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0.0"
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
if (isNewArchitectureEnabled()) {
// We configure the NDK build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
ndkBuild {
arguments "APP_PLATFORM=android-21",
"APP_STL=c++_shared",
"NDK_TOOLCHAIN_VERSION=clang",
"GENERATED_SRC_DIR=$buildDir/generated/source",
"PROJECT_BUILD_DIR=$buildDir",
"REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
"REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build"
cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1"
cppFlags "-std=c++17"
// Make sure this target name is the same you specify inside the
// src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
targets "app_appmodules"
// Fix for windows limit on number of character in file paths and in command lines
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
arguments "NDK_APP_SHORT_COMMANDS=true"
}
}
}
if (!enableSeparateBuildPerCPUArchitecture) {
ndk {
abiFilters (*reactNativeArchitectures())
}
}
}
missingDimensionStrategy 'store', 'play'
}
Y ya podemos generar de nuevo el build de desarrollo sin error.
Si queremos aplicar automáticamente este parche podemos crear un plugin personalizado.
Creamos un archivo llamado ComprasInAPPConfigBuild.js
Con este contenido:
const { withAppBuildGradle } = require('@expo/config-plugins');
function ComprasInAPPConfigBuild(config) {
return withAppBuildGradle(config, (config) => {
if (config.modResults.contents) {
// Verifica si 'missingDimensionStrategy' ya está en el bloque defaultConfig
if (!config.modResults.contents.includes("missingDimensionStrategy 'store', 'play'")) {
config.modResults.contents = config.modResults.contents.replace(
/defaultConfig\s*{([\s\S]*?)}/,
`defaultConfig { $1
missingDimensionStrategy 'store', 'play'
}`
);
}
}
return config;
});
}
module.exports = ComprasInAPPConfigBuild;
Ahora para que se aplique, añadimos este plugin en app.json:
{
"expo": {
"plugins": [
"./ComprasInAPPConfigBuild"
]
}
}
Y usamos el comando:
npx expo prebuild

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.
1 comentario en «Solucionar error Could not resolve project :react-native-iap al generar build dev con la librería react-native-iap en React Native de compras in APP»