工作中的惊喜不断,今天遇到一个问题,一个客户的手机升级为最新的Android 10系统后,原来的我们项目的APP一点击Icon启动APP就闪退,根本不能用。
一开始怀疑是App版本兼容问题,查看项目app/build.gradle文件中配置如下:
android { compileSdkVersion 27 buildToolsVersion "27.0.3" defaultConfig { multiDexEnabled true applicationId "com.huaxing.alpha.apps.apollo" // "com.huaxing.alpha.apps.apollo" 正式的极光推送包名,// "com.astarup.app" 测试报名 minSdkVersion 23 targetSdkVersion 27 versionCode 49 versionName "5.5.3" manifestPlaceholders = [ JPUSH_APPKEY: "d21c04aa23b0050dea5bf85c", //"d21c04aa23b0050dea5bf85c", // efd166b53c414825b0d3afe7 是测试的key APP_CHANNEL : "developer-default" ] ndk { abiFilters "armeabi-v7a", "x86" } }
查阅一堆资料后,发现并不是APP当前Android版本低造成的无法兼容Android10系统手机。
于是尝试进行重新打包,在Android10手机进行实际测试。打包过程中遇到以下报错:
Android AAPT: No resource identifier found for attribute 'appComponentFactory' in package 'android'
在解决这个报错的过程中查到了这个资料issues
):
这个报错应该是google在androidx, google play service的问题,当前APP没有支持AndroidX,解决方案,在项目android/build.gradle文件中添加如下代码:
ext { buildToolsVersion = "26.0.3" minSdkVersion = 16 compileSdkVersion = 26 targetSdkVersion = 26 supportLibVersion = "26.1.0" // 添加googlePlayServicesVersion googlePlayServicesVersion = '16.+' }
重新打包后,安装真机测试,完美运行。
进一步查看发现是因为项目中有react-native-device-info
依赖,查看项目说明中关于对AndroidX的支持,已有文档说明了😀
This module defaults to AndroidX you should configure your library versions similar to this in your android/build.gradle file's "ext" block
... ext { // dependency versions We have 3 options for deviceId: //Option 1 (latest): firebaseIidVersion = "19.0.1" // default: "19.0.1" //Option 2 (legacy GooglePlay dependency but using AndroidX): googlePlayServicesIidVersion = "17.0.0" // default: "17.0.0" - AndroidX //Option 3 (legacy GooglePlay dependency before AndroidX): googlePlayServicesIidVersion = "16.0.1" //include as needed: compileSdkVersion = "28" // default: 28 (28 is required for AndroidX) targetSdkVersion = "28" // default: 28 (28 is required for AndroidX) supportLibVersion = '1.0.2' // Use '28.0.0' or don't specify for old libraries, '1.0.2' or similar for AndroidX mediaCompatVersion = '1.0.1' // Do not specify if using old libraries, specify '1.0.1' or similar for androidx.media:media dependency supportV4Version = '1.0.0' // Do not specify if using old libraries, specify '1.0.0' or similar for androidx.legacy:legacy-support-v4 dependency } ...
总结一下吧,科技不断发展,技术也在不断提升,作为开发者,在开发的道路上总会遇到各种各样的问题,也许你会不知所措,但是当你迎着头皮上,解决这个问题的时候,你也学习成长了。
加油,开发者们。