引入location包后Flutter Android应用启动即崩溃求助
兄弟,这种光引入依赖没调用任何代码就崩溃的情况真的挺头疼的,我之前也遇到过类似的依赖冲突问题。结合你的情况——单独用location包没问题,和firebase_auth、cloud_firestore共存就崩,而且Flutter日志没给有用线索,我给你几个靠谱的排查和解决方向:
优先排查版本兼容性问题
你用的location: ^1.2.0是非常早期的版本(现在最新版都到6.x系列了),而你的firebase_auth(0.5.10)和cloud_firestore(0.7.2)同样是旧版本,很大概率是它们的底层原生代码(Android的gradle配置、iOS的Pods依赖)存在冲突。建议先尝试把location升级到一个和你的firebase依赖版本更匹配的中间稳定版本,比如location: ^2.3.5。更新pubspec后,一定要清理项目缓存再重新运行:flutter clean flutter pub get # Android额外清理gradle缓存 cd android && ./gradlew clean && cd .. # iOS清理并重新安装Pods cd ios && pod deintegrate && pod install && cd ..检查系统权限配置是否缺失
有些老版本的location包,即使你没调用它的API,在初始化阶段也会检查系统权限配置,如果AndroidManifest.xml或Info.plist里没加必要的权限声明,直接就会触发崩溃:- Android端:在
android/app/src/main/AndroidManifest.xml里添加位置权限:<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> - iOS端:在
ios/Runner/Info.plist里添加权限描述(描述内容可以根据你的需求修改):<key>NSLocationWhenInUseUsageDescription</key> <string>需要访问您的位置信息以提供相关服务</string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>需要访问您的位置信息以提供相关服务</string>
- Android端:在
直接查看原生平台的崩溃日志
Flutter层面的日志没线索很正常,因为这种崩溃大概率是原生端(Android/iOS)触发的,直接看原生日志才能定位问题:- Android:打开Android Studio的Logcat,过滤“Error”或“Crash”关键词,或者在设备的开发者选项里查看崩溃报告;
- iOS:用Xcode打开
ios/Runner.xcworkspace,运行项目后看控制台的崩溃栈信息,能精准定位到是哪个原生类或方法出的问题。
隔离排查依赖冲突点
如果上面的方法都没解决,可以尝试逐个移除其他依赖:先只保留flutter和location,确认项目能正常启动;然后再逐个添加firebase_auth、cloud_firestore,每次添加后运行项目,看添加哪个依赖后出现崩溃,这样就能精准找到冲突的根源,再针对性调整版本。
内容的提问来源于stack exchange,提问作者t0rus

