React Native Android 构建,“错误:无法获取未知属性‘mergeResourcesProvider’”
我已经使用 RN 0.59.3 升级了我的应用程序,从那时起,我在构建 Android 时收到错误。 iOS 可以很好地构建应用程序。
Android Studio
错误:无法获取 com.android.build.gradle.internal.api.ApplicationVariantImpl 类型的对象的未知属性“mergeResourcesProvider”。
控制台
error Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have set up your Android development environment:
https://facebook.github.io/react-native/docs/getting-started.html
error Command failed: ./gradlew app:installSabdebugDebug
我尝试将 android/app/gralde/wrapper/gradle-wrapper.propeties 中的 distributionUrl 更改为
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
并且我将 build.gradle 依赖项升级到这些版本
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.2.0'
...
}
这是整个文档
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
minSdkVersion = 16
compileSdkVersion = 27
targetSdkVersion = 26
androidMapsUtilsVersion = "0.5+"
googlePlayServicesAuthVersion = "16.0.1"
}
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
并且我正在设置这些 app/build.gradle
android {
compileSdkVersion safeExtGet('compileSdkVersion', 28)
buildToolsVersion safeExtGet('buildToolsVersion', '28.0.0')
defaultConfig {
applicationId "com.myapp"
resValue "string", "build_config_package", "com.myapp"
minSdkVersion 18
multiDexEnabled true
targetSdkVersion 26
versionCode 24
versionName "1.3.5"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
...
我的 package.json
"dependencies": {
"babel-plugin-transform-remove-console": "^6.9.4",
"formik": "^1.3.1",
"lodash": "^4.17.10",
"moment": "^2.23.0",
"moment-timezone": "^0.5.21",
"native-base": "^2.8.1",
"react": "16.8.3",
"react-native": "0.59.3",
....
}
"devDependencies": {
"@babel/core": "^7.4.3",
"@babel/runtime": "^7.4.3",
"babel-jest": "^24.7.0",
"jest": "^24.7.0",
"metro-react-native-babel-preset": "^0.53.1",
"react-test-renderer": "16.8.3",
"run-script-os": "~1.0.5"
},
此外,我们正在使用脚本通过 run-script-os 构建应用程序的不同环境,但我不认为这是导致问题的原因。
我还遇到了无法找到 Android sdk 的错误,但我使用 local.properties 解决了该问题。
干杯!
在
gradle-wrapper.properties:
中,将
distributionUrl
更改为
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
然后在根
build.gradle
文件中将 gradle classpath 更改为:
classpath 'com.android.tools.build:gradle:3.3.0'
删除
node_modules
并再次执行
npm install && react-native run-android
。
编辑:工作版本
我已使用
"react": "16.8.6",
"react-native": "0.59.8"
android/app/gradle/wrapper/gradle-wrapper.propeties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
android/build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.2.0'
...
}
这是整个文档
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 19
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
appCompatVersion = "28.0.0"
androidMapsUtilsVersion = "0.5+"
googlePlayServicesAuthVersion = "16.0.1"
googlePlayServicesBaseVersion = "16.1.0"
googlePlayServicesLocationVersion = "16.0.0"
googlePlayServicesPlacesVersion = "1.1.0"
firebaseCoreVersion = "16.0.9"
firebaseMessagingVersion = "18.0.0"
}
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
// maven {
// // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
// url "https://maven.google.com"
// }
}
}
android/app/build.gradle
android {
compileSdkVersion safeExtGet('compileSdkVersion', 28)
buildToolsVersion safeExtGet('buildToolsVersion', '28.0.0')
defaultConfig {
applicationId "com.sportjoe"
resValue "string", "build_config_package", "com.myapp"
minSdkVersion safeExtGet('minSdkVersion', 19)
multiDexEnabled true
targetSdkVersion safeExtGet( 'targetSdkVersion' , 28 )
versionCode 34
versionName "1.4.11"
ndk {
abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
}
...
我的 package.json
"dependencies": {
"babel-plugin-transform-remove-console": "^6.9.4",
"formik": "^1.5.4",
"lodash": "^4.17.11",
"moment": "^2.24.0",
"moment-timezone": "^0.5.25",
"native-base": "^2.12.1",
"react": "16.8.6",
"react-native": "0.59.8"
....
}
"devDependencies": {
"babel-jest": "24.8.0",
"babel-preset-react-native": "4.0.1",
"jest": "24.8.0",
"react-test-renderer": "16.8.6",
"run-script-os": "~1.0.5"
},
现在似乎对我有用,希望它能有所帮助!