从Eclipse迁移到Android Studio后Google Maps依赖问题求助
解决Eclipse迁移到Android Studio后Google Maps类无法解析的问题
看起来你卡在了旧版Google Maps API的迁移上,我来帮你理清问题根源和解决办法:
问题核心
你导入的com.google.android.maps.*类属于Google Maps Android API v1,这个API早在多年前就被官方弃用了,现在的Android Studio和新版Google Play Services已经完全不再支持它。你添加的com.google.android.gms:play-services:+是Maps v2及后续版本的依赖,但和v1的类完全不兼容,所以才会出现导入无法解析的情况。
具体解决步骤
1. 替换依赖配置
首先移除你手动生成的google-play-services jar包,然后修改build.gradle的依赖部分:
- 把模糊的
compile 'com.google.android.gms:play-services:+'替换成具体的Maps v2依赖(不要用+号,指定稳定版本更可靠) - 把旧的
compile关键字换成现在推荐的implementation
修改后的dependencies片段:
dependencies { implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support:support-v4:26.1.0' // 替换成适配你compileSdk的Maps v2版本,26对应17.x版本比较合适 implementation 'com.google.android.gms:play-services-maps:17.0.1' implementation files('libs/android-query-full.0.26.7.jar') implementation files('libs/android-support-v13.jar') implementation files('libs/libGoogleAnalyticsV2.jar') implementation files('libs/ormlite-android-4.41.jar') implementation files('libs/ormlite-core-4.41.jar') implementation files('libs/SekindoAndroidSdk.jar') implementation files('libs/verdatasdk.jar') implementation files('libs/wheel.jar') }
2. 替换旧的Maps v1类
所有com.google.android.maps.*的导入都要换成Maps v2对应的类,常见替换如下:
com.google.android.maps.MapActivity→ 继承AppCompatActivity,配合SupportMapFragment使用com.google.android.maps.MapView→com.google.android.gms.maps.MapViewcom.google.android.maps.GeoPoint→com.google.android.gms.maps.model.LatLngcom.google.android.maps.ItemizedOverlay/Overlay→ 使用GoogleMap.addMarker()结合MarkerOptions实现标记,或者用GroundOverlay等替代com.google.android.maps.MapController→ 使用GoogleMap.getUiSettings()控制交互,用CameraUpdateFactory控制地图视角
3. 调整布局文件
如果你的布局里用了旧的MapView,要替换成v2的版本:
<com.google.android.gms.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" />
4. 配置Manifest文件
添加Maps v2必需的权限和元数据:
<!-- 地图相关权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <!-- 声明使用OpenGL ES 2.0(Maps v2需要) --> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <!-- 在application标签内添加API密钥配置 --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="你的Google Maps API密钥" />
注意:你需要在Google Cloud Console中启用Google Maps Android API v2,并生成绑定你应用SHA1和包名的API密钥。
5. 代码迁移示例
原来的v1地图初始化代码可以改成这样的v2版本:
// 替换原来的MapActivity继承为AppCompatActivity public class YourMapActivity extends AppCompatActivity implements OnMapReadyCallback { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_map_layout); // 获取MapFragment并异步初始化地图 SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // 添加标记示例 LatLng target = new LatLng(39.9042, 116.4074); // 替换成你的坐标 mMap.addMarker(new MarkerOptions().position(target).title("示例标记")); // 移动地图到目标位置 mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(target, 12)); } }
为什么之前的jar包没用?
旧的Google Maps v1库已经被官方移除,Android Studio的构建系统不会识别你手动生成的v1 jar包,而且新版Google Play Services只包含v2及以后的地图API,所以这种方法完全行不通。
内容的提问来源于stack exchange,提问作者Sirop4ik
相关产品推荐
相关产品推荐

