这个问题排查了几个小时。在这里提供一下具体的排查思路,但愿能给各位老铁一点提示。react
昨天原本打包还好好的。今天在 android 打包的时候,今天忽然间有一个奇怪的报错,致使打包失败了:android
/Users/PAMPANG/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.1.aar/aeb63fa7e61ad852e8a67f3e8b29c11b/res/values/values.xml:251:5-69: AAPT: error: resource android:attr/fontVariationSettings not found.
/Users/PAMPANG/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.1.aar/aeb63fa7e61ad852e8a67f3e8b29c11b/res/values/values.xml:251:5-69: AAPT: error: resource android:attr/ttcIndex not found.
error: failed linking references.
FAILURE: Build failed with an exception.
复制代码
嗯??什么奇怪的错误??git
定睛一看,错误中有关键词:github
appcompat-v7-27.1.1.aar
AAPT: error: resource android:attr/fontVariationSettings not found
复制代码
OK,根据这两个关键词上网冲浪去。web
咱们用的是 react-native
,所以先看看 react-native
的 issue 里有没有相似的问题。react-native
搜到了两个相关的 issue:bash
https://github.com/facebook/react-native/issues/25338
https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview/issues/207
复制代码
经过这两个连接,又发现了一个 stackOverFlow 的网站:app
https://stackoverflow.com/questions/56654226/ionic-cordova-app-stopped-compiling-after-googles-june-17th-firebase-sdk-update
复制代码
在这里,我获得了有效信息:google 在 20190617 发布了新版本,须要作 XXX 才能适配。我虎躯一震,难道要我更新?!ionic
但再细细一想,不该该啊,那全部的 android 项目不都得挂了?应该是个人包里有了什么错误的依赖致使的。ide
带着这个问题,我再次搜索信息。
我又从新开始查信息了。这个 issue 中一位小哥的回答给了我很大的提示。他的主要思路是整个 app 的依赖列表输出出来,看看哪一个小坏蛋引入了不应有的依赖。
我在命令行运行 ./gradlew app:dependencies
把整个 app 的依赖列表输出出来,对应着 google 的更新列表,看看究竟是哪一个小坏蛋引用了最新的依赖。
根据包名搜索了一番,发现是 react-native-device-info
中引用了 gms
,而 gms
的版本号是 +
,即直接去最新版,因此就拿了最新的版本依赖了。而这个最新的版本,是须要作适配才能启用的,所以就出问题了。
能够看到,在 react-native-device-info@0.24.3 的这一行代码 中,用 +
号引入了 gms
。
那么,想要解决就很简单了:
根据 这个 issue 连接 中的提示,加一个常量 googlePlayServicesVersion
,给固定版本便可 或者,更新 react-native-device-info
到最新版,它对这个依赖的版本号加了一个默认版本,而不是 + 了。
至此,problem solved。
google 在 20190617 发布了新的更新: stackoverflow.com/questions/5…
google 更新查询列表: developers.google.com/android/gui…
google 依赖列表: ./gradlew app:dependencies