You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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.MapView
  • com.google.android.maps.GeoPoint → com.google.android.gms.maps.model.LatLng
  • com.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:38:06