真是蛋疼,以前開過百度地圖,這次直接複製過來使用,結果碰一鼻子灰,在這裏好好總結下
百度地圖的步驟:
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()之前