Android Studio中AVD运行崩溃及FusedLocationApi无法识别问题求助
看起来你碰到了两个关联的问题:FusedLocationApi类无法识别、无法导入,同时在Pixel 5x(API27)模拟器上运行应用时崩溃。结合你提到的Gradle怀疑点,我来一步步帮你排查修复:
一、搞定FusedLocationApi无法识别的问题
首先得明确:FusedLocationApi在Google Play Services Location库的11.0.0版本之后就被官方弃用了,现在推荐使用FusedLocationProviderClient来替代。你找不到这个类,大概率是依赖配置不对,或者还在使用已经被移除的过时API。
1. 修正App级Gradle依赖
打开你的App模块下的build.gradle(注意是App级别的,不是Project根目录的那个),把定位服务的依赖换成适配API27的稳定版本——API27对应Android 8.1,推荐用17.0.0版本的Play Services Location,避免版本兼容性问题:
dependencies { // 替换成这个适配API27的定位依赖 implementation 'com.google.android.gms:play-services-location:17.0.0' // 保留你其他的依赖项... }
顺便检查下你的
android块配置,确保compileSdkVersion和targetSdkVersion都设为27,和模拟器的API版本匹配:android { compileSdkVersion 27 defaultConfig { targetSdkVersion 27 // 其他配置... } }
2. 替换过时的FusedLocationApi代码
把原来依赖FusedLocationApi的代码,换成FusedLocationProviderClient的实现,给你个适配的示例:
package com.matt.mapapp; import android.Manifest; import android.content.pm.PackageManager; import android.location.Location; import android.os.Bundle; import android.os.Looper; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import com.google.android.gms.location.FusedLocationProviderClient; import com.google.android.gms.location.LocationCallback; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationResult; import com.google.android.gms.location.LocationServices; import com.google.android.gms.tasks.OnSuccessListener; public class MapActivity extends AppCompatActivity { private FusedLocationProviderClient fusedLocationClient; private LocationCallback locationCallback; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map); // 初始化定位客户端 fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); // 先检查权限,API23+需要动态申请 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // 申请定位权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1001); return; } // 获取最后一次已知位置 fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { if (location != null) { // 这里处理获取到的位置数据,比如更新地图 } } }); // 如果需要持续获取位置更新,用LocationCallback LocationRequest locationRequest = LocationRequest.create(); locationRequest.setInterval(10000); // 10秒更新一次 locationRequest.setFastestInterval(5000); // 最快5秒更新一次 locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationCallback = new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult) { if (locationResult == null) return; for (Location location : locationResult.getLocations()) { // 处理实时更新的位置 } } }; // 开始请求位置更新 fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper()); } @Override protected void onDestroy() { super.onDestroy(); // 记得在销毁时移除位置更新,避免内存泄漏 if (locationCallback != null) { fusedLocationClient.removeLocationUpdates(locationCallback); } } }
二、排查Pixel 5x(API27)模拟器崩溃问题
应用崩溃大概率和权限、API兼容性或者模拟器配置有关,按下面的步骤逐一排查:
1. 先看崩溃日志(最关键)
打开Android Studio的Logcat窗口,过滤Error级别日志,找到崩溃的堆栈跟踪信息——比如是NullPointerException、SecurityException还是其他异常,这是定位问题的核心。比如如果是权限没申请,会出现SecurityException: "ACCESS_FINE_LOCATION" permission missing的提示。
2. 确认权限配置正确
在AndroidManifest.xml里必须添加这两个定位权限:
<!-- 精确定位权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 粗略定位权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
如果你的App需要后台定位(API26+),还得加上:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
3. 检查模拟器的定位设置
- 打开模拟器的系统设置,进入位置选项,确保已开启位置服务,并设置为高精度模式。
- 可以通过模拟器右侧工具栏的Extended Controls(三个点图标)-> Location,手动输入经纬度模拟位置,测试定位功能是否正常。
4. 清理Gradle缓存并重建项目
有时候Gradle缓存会导致依赖加载异常,执行以下步骤:
- 点击Android Studio顶部的
File->Invalidate Caches / Restart,选择Invalidate and Restart。 - 重启后点击
Build->Rebuild Project,彻底重建项目。
内容的提问来源于stack exchange,提问作者Matt

