真是蛋疼,以前开过百度地图,这次直接复制过来使用,结果碰一鼻子灰,在这里好好总结下
百度地图的步骤:
1、在百度开放着平台申请密钥,这个不会的,看里面的说明把
2、将百度地图所需要的包和so库文件拷到工程中,这里很容易出问题,在eclipse中,这两者的设置方式是一样的,但在as中,二者不是一致的
.jar的包,放在libs中即可,但是.so库文件却不能这么简单的处理,网络上艘一下,有很多中方法,但总结出来就三种:
a、直接将.so的文件放在libs目录下,然后在app的build.gradle中的android标签下添加
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
这样就把.so库文件编译成jar文件
b、在main目录下,新建一个jniLibs文件夹,将armeabi的所有内容复制进去,然后就能直接编译进apk的包中了
c、在其他地方新建lib文件夹,将armeabi的内容全部复制进去,然后压缩,命名为armeabi..jar并放入libs目录下即可
3、在manifest文件中,对application进行添加修改
如果是在自定义的application中进行初始化的话(官方推荐,因为application是最先执行的,而百度地图的初始化必须在set'ContentView()方法之前,所以建议在app中进行初始化,若在setContentView之后进行初始化,则会报错),则需要先在application的标签下添加
android:name=".app.MyApplication"
这样才会在运行的时候最先执行自定义的application
然后需要添加第一步申请来的key,也是添加在application中
<meta-data最后 android:name="com.baidu.lbsapi.API_KEY" android:value="geKdo2M1V4t6I5X7ClLkMOb7"/>
还需要添加service标签
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
还需要添加所需要的权限,我是复制了最完整的权限,直接复制即可
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> </uses-permission> <uses-permission android:name="android.permission.INTERNET"> </uses-permission> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/> <uses-permission android:name="android.permission.WAKE_LOCK"> </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? --> <uses-permission android:name="android.permission.GET_TASKS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <!-- 这个权限用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"> </uses-permission> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> </uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"> </uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> </uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission> <!-- 用于读取手机当前的状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission> <!-- 访问网络,网络定位需要上网 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- SD卡读取权限,用户写入离线定位数据 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"> </uses-permission> <!-- 允许应用读取低级别的系统日志文件 --> <uses-permission android:name="android.permission.READ_LOGS"> </uses-permission>
如果
这样就可以开始开发百度地图了。
下面是完整的manifest文件
<?xml version="1.0" encoding="utf-8"?> <manifest package="包名" android:installLocation="preferExternal" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:name=".app.MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="自己的key"/> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service> <activity android:name=".main.MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> </uses-permission> <uses-permission android:name="android.permission.INTERNET"> </uses-permission> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/> <uses-permission android:name="android.permission.WAKE_LOCK"> </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? --> <uses-permission android:name="android.permission.GET_TASKS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <!-- 这个权限用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"> </uses-permission> <!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"> </uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"> </uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"> </uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission> <!-- 用于读取手机当前的状态 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission> <!-- 访问网络,网络定位需要上网 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- SD卡读取权限,用户写入离线定位数据 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"> </uses-permission> <!-- 允许应用读取低级别的系统日志文件 --> <uses-permission android:name="android.permission.READ_LOGS"> </uses-permission> </manifest>
本人开发中遇到的问题:
报错:
Failure [INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]
解决:这是cpu对armeabi中so文件的不匹配,只要分文件使用
里面有五个型号的arm ,cpu'会自动对应,而每个文件夹的内容是一样的
报错:
Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]
解决:
在manifest文件中的头标签中添加
android:installLocation="preferExternal"
报错:
you have not supplyed the global app context info from SDKInitializer.initialize(Context) function
解决:
百度地图的初始化必须在setContentView()之前