如果用百度地圖SDK進行地圖,定位,導航等相關開發時,需要如下步驟:
1、進入百度地圖API官網:http://developer.baidu.com/map/index.php?title=首頁,申請key,具體方法詳見官網方法;
2、下載下傳你需要的地圖,定位,導航SDK和Sample;
3、建立android project,
把libBaiduMapSDK_v_x_x_x.so檔案copy進libs中的armeabi檔案夾中;把baidumapapi_v_x_x_x.jar放進libs下。
4、編輯AndroidManifest.xml檔案:
package名字就是你申請key時用的包名;
增加使用者權限設定:
application中添加meta-data,就是放申請key的地方:
5、編輯layout檔案:即添加com.baidu.mapapi.MapView:
<span style="font-family:SimSun;font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.baidumap.demo.MainActivity" >
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
/>
</RelativeLayout></span>
6、編輯主activity檔案:
<span style="font-family:SimSun;font-size:14px;">public class MainActivity extends Activity {
MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各元件之前初始化context資訊,傳入ApplicationContext
//注意該方法要在setContentView方法之前實作
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.main);
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mMapView.onDestroy();
}</span>
注意的地方已經在代碼段中進行了注釋!
7、一切完成,貌似可以運作了!并!不!是!
報錯了!有木有!
8、解決辦法:
添加armeabi-v7a檔案夾,copy上述的libBaiduMapSDK_v_x_x_x.so檔案;這下程式可以運作!
9、這是為什麼呢?
android project中有一個 libs檔案夾,此檔案夾下包含了armeabi 和armeabi-v7a兩個檔案夾,我們的c代碼編譯成的本地庫(各種.so)就會放在這兩個檔案夾其中的一個。那armeabi-v7a 與 armeabi有什麼差別,都是什麼意思呢?
armeabi和armeabi-v7a是表示cpu的類型,我們知道一般的手機或平闆都是用arm的cpu(mips的就悲催的被忽視了),不同的cpu的特性不一樣,armeabi就是針對普通的或舊的arm cpu,armeabi-v7a是針對有浮點運算或進階擴充功能的arm cpu。
當然,你同樣可以在android.mk裡可配置以下宏:
TARGET_CPU_API := armeabi
APP_ABI := armeabi
當你編譯時出現一些連結動态庫的undefine錯誤,或你的apk運作時出現裝載.so動态庫錯誤時,這個時候你就要想想這個cpu類型的配置是否有誤