百度地图 android Unable to execute dex: Multiple dex files define Lcom/baidu/location/BDLocation$a

1.开发工具

    Android开发工具有很多,开发者可根据自己的喜好进行选择。在此,我们推荐开发者使用Eclipse作为自己的开发工具,本套开发指南也是针对Eclipse开发环境下进行编写的。

2.工程配置

    第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;

    注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发者可根据实际需求自行添加。

    第二步:在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。

    通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。

注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:

1. 在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;

2. Project -> clean-> clean all .

3.显示地图

    百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:

    第一步:创建并配置工程(具体方法参见工程配置部分的介绍);

    第二步:在Manifest中添加使用权限及Android版本支持;

    常用使用权限如下(开发者可根据自身程序需求,添加所需权限):

源码 复制 打印 关于
  1.   
  2. "android.permission.ACCESS_NETWORK_STATE">  
  3.   
  4. "android.permission.INTERNET">  
  5.   
  6. "android.permission.ACCESS_WIFI_STATE">  
  7.   
  8. "android.permission.CHANGE_WIFI_STATE">  
  9.   
  10.   
  11. "android.permission.WRITE_EXTERNAL_STORAGE">  
  12.   
  13. "android.permission.WRITE_SETTINGS">  
  14.   
  15.   
  16. "android.permission.READ_PHONE_STATE">  
  17.   
  18. "android.permission.CALL_PHONE">  
  19.   
  20.   
  21. "android.permission.ACCESS_FINE_LOCATION">  
  22.   
  23. "android.permission.BAIDU_LOCATION_SERVICE">  
  24.   
  25. "android.permission.BAIDU_LOCATION_SERVICE">  
  26.   
  27. "android.permission.ACCESS_COARSE_LOCATION">  
  28.   
  29. "android.permission.ACCESS_MOCK_LOCATION">  
  30.   
  31. "android.permission.ACCESS_GPS"/>                    

    配置Activity:

源码 复制 打印 关于
  1. ".MapDemo"  
  2.           android:screenOrientation="sensor"  
  3.           android:configChanges="orientation|keyboardHidden">  
  4.   

    添加屏幕及版本支持:

源码 复制 打印 关于
  1. "true"  
  2.             android:normalScreens="true"  
  3.             android:smallScreens="true"  
  4.             android:resizeable="true"  
  5.             android:anyDensity="true"/>  
  6. "7">  

    第三步:在布局xml文件中添加地图控件,布局文件保存为activity_main.xml:

源码 复制 打印 关于
  1. "1.0" encoding="utf-8"?>  
  2. "http://schemas.android.com/apk/res/android"  
  3.             android:orientation="vertical"  
  4.             android:layout_width="fill_parent"  
  5.             android:layout_height="fill_parent">  
  6.             "fill_parent"  
  7.                     android:layout_height="wrap_content"  
  8.                     android:text="hello world" />  
  9.             "@+id/bmapsView"  
  10.                     android:layout_width="fill_parent"  
  11.                     android:layout_height="fill_parent"  
  12.                     android:clickable="true" />  
  13.   

    第四步:创建地图Activity,并import相关类:

源码 复制 打印 关于
  1. import android.app.Activity;  
  2. import android.content.res.Configuration;  
  3. import android.os.Bundle;  
  4. import android.view.Menu;  
  5. import android.widget.FrameLayout;  
  6. import android.widget.Toast;  
  7. import com.baidu.mapapi.BMapManager;  
  8. import com.baidu.mapapi.map.MKMapViewListener;  
  9. import com.baidu.mapapi.map.MapController;  
  10. import com.baidu.mapapi.map.MapPoi;  
  11. import com.baidu.mapapi.map.MapView;  
  12. import com.baidu.platform.comapi.basestruct.GeoPoint;  
  13.    
  14. public class MyMapActivity extends Activity{  
  15.         @Override  
  16.         public void onCreate(Bundle savedInstanceState){  
  17.         }  
  18. }   

    第五步:初始化地图Activity、使用Key:

    在MyMapActivity中定义成员变量:

源码 复制 打印 关于
  1. BMapManager mBMapMan = null;  
  2. MapView mMapView = null;  

    在onCreate方法中增加以下代码,并将您申请的Key替换“我的Key”

源码 复制 打印 关于
  1. super.onCreate(savedInstanceState);  
  2. mBMapMan=new BMapManager(getApplication());  
  3. mBMapMan.init("我的Key"null);    
  4. //注意:请在试用setContentView前初始化BMapManager对象,否则会报错  
  5. setContentView(R.layout.activity_main);  
  6. mMapView=(MapView)findViewById(R.id.bmapsView);  
  7. mMapView.setBuiltInZoomControls(true);  
  8. //设置启用内置的缩放控件  
  9. MapController mMapController=mMapView.getController();  
  10. // 得到mMapView的控制权,可以用它控制和驱动平移和缩放  
  11. GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));  
  12. //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)  
  13. mMapController.setCenter(point);//设置地图中心点  
  14. mMapController.setZoom(12);//设置地图zoom级别  

    重写以下方法,管理API

源码 复制 打印 关于
  1. @Override  
  2. protected void onDestroy(){  
  3.         mMapView.destroy();  
  4.         if(mBMapMan!=null){  
  5.                 mBMapMan.destroy();  
  6.                 mBMapMan=null;  
  7.         }  
  8.         super.onDestroy();  
  9. }  
  10. @Override  
  11. protected void onPause(){  
  12.         mMapView.onPause();  
  13.         if(mBMapMan!=null){  
  14.                mBMapMan.stop();  
  15.         }  
  16.         super.onPause();  
  17. }  
  18. @Override  
  19. protected void onResume(){  
  20.         mMapView.onResume();  
  21.         if(mBMapMan!=null){  
  22.                 mBMapMan.start();  
  23.         }  
  24.        super.onResume();  
  25. }  

    完成以上步骤后,运行程序,即可在您的应用中显示如下地图:

以上的例子为大家介绍了如何构建一个基础的地图页面。地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MutiMapViewDemo中的相关介绍。

此外,自v2.3.5版本开始。MapView控件还增加了对Fragment框架的支持。用户可以使用SupportMapFragment控件完成相应框架内的开发工作(详见MapFragmentDemo)。

有问题一直报错但是没有X,解决方法:右击工程——properties——javabuildpath——移除 private libs 

并且注意老版本要改

再重新运行就可以看到百度地图了

你可能感兴趣的:(android)