《ArcGIS Runtime SDK for Android開發筆記》——(5)、基於Android Studio構建ArcGIS Android開發環境(離線部署)

一、前言

在上一篇的內容裏咱們介紹了基於Android Studio構建ArcGIS Runtime SDK for Android開發環境的基本流程,流程中咱們採用的是基於Gradle的構建方式,在這種方式裏主要經過設置maven倉庫位置,設置編譯選項、依賴版本在聯網環境下下載對應SDK依賴包。html

可是在網絡狀況很差的狀況下這種方式就不行了,那怎麼解決在離線環境或者內網環境實現開發流程呢?目前瞭解到的有兩種方式:java

1)配置內網環境maven倉庫,預先緩存到內網環境下,而後離線調用。android

2)採用直接拷貝引用方式,拷貝jar包、so庫到對應第三方庫支持位置,直接調用使用。api

這兩種方式各有各的優劣,看具體使用場景,在這裏咱們主要介紹第二種拷貝引用的方式。緩存

 

二、離線部署流程

2.一、下載ArcGIS Runtime SDK for Android的SDK包

1) 登錄ArcGIS Runtime SDK for Android開發者資源中心。網絡

 

2) 登錄後點擊下載按鈕、在下載頁面下載對應SDK包app

 

2.二、拷貝相關支持函數庫到指定項目對應位置並添加引用

1)解壓下載下來的zip包,SDK包中主要包含如下內容:maven

其中裏面比較重要的有如下幾項:
1、doc —— 該版本SDK對應的API文檔,官網一直都是最新的,須要查看舊版API或者指定版本API說明的的通常須要到這裏查找
2、lib-project —— aar格式的函數庫,例如:arcgis-android-v10.2.6-2.aar
3、libs —— jar和so格式的函數庫,通常在項目中拷貝到項目文件夾下,引用便可,可實現離線部署
4、samples——示例代碼。官方全部示例代碼都在這裏,新版基於Android studio 開發環境
其餘說明:SDK包下載及說明也能夠參考博文http://www.cnblogs.com/gis-luq/p/4735815.html

2)打開SDK包中lib文件夾,將jar包拷貝包對項目的lib文件夾下函數

將libs中的:arcgis-android-api.jar、arcgis-android-app-toolkit.jar、jackson-core-1.9.5.jar、jackson-mapper-1.9.5.jar、jcifs-1.3.17.jar這個5個jar包拷貝到新建Android項目HelloMap2中的../app/libs文件夾下佈局

3)在項目的../src/main文件夾下建立jniLibs文件夾,並將armeabi、armeabi-v7a、x86三個文件夾拷貝到jniLibs文件夾下。

 

說明:其實這裏關於如何在android studio配置java訪問so庫的方式有很好幾種,在網上也有相關的說明博客,這裏我是選了我認爲相對最簡單一種作了測試,並測試OK,因此用了這種方式。其餘方式暫時沒有測過

2.三、添加UI及代碼信息

1)在佈局文件activity_main.xml中添加mapview組件

    <com.esri.android.map.MapView
        android:id="@+id/map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </com.esri.android.map.MapView>

在這裏咱們注意到環境並無識別到com.esri.android.map.MapView類,並提示異常。切換項目顯示方式爲project。

選中項目下app/libs/arcgis-android-api.jar右鍵設置Add As Library,添加以後「找不到com.esri.android.map.MapView類」的問題就沒有了。

同時咱們查看app下的build.gradle,發現增長了一條編譯選項,這裏咱們用代碼的方式直接加在這裏也是能夠的。

2)添加代碼信息,實現MapView的UI和代碼綁定,添加一個圖層並顯示出來

private MapView mapView = null;
this.mapView = (MapView)this.findViewById(R.id.map);//設置UI和代碼綁定
String strMapUrl="http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer";
ArcGISTiledMapServiceLayer arcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(strMapUrl);
this.mapView.addLayer(arcGISTiledMapServiceLayer);

2.四、設置應用程序權限

對於絕大多數的ArcGIS Android apps的應用幾乎都須要網絡的支持;也有一些應用可能會須要訪問設備的sdcard,須要對該卡有讀寫的權限;除此對於GIS來講最經常使用的功能就是定位,應用應該具有定位權限。 ArcGIS Android apps的MapView使用了OpenGL2.x,因此在android應用程序的配置文件AndroidManifest.xml中還需添加 OpenGL的支持,所以應用的配置文件至少包含下面的配置信息:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
    <uses-feature    
        android:glEsVersion="0x00020000"    
        android:required="true" />

2.五、編譯運行應用程序

直接運行後咱們還發現了這樣的一個錯誤,提示須要忽略許可信息在打包選項中。

打開build.gradle(Module:app)設置排除相關信息

 packagingOptions {
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }

從新運行編譯,程序經過

相關文章
相關標籤/搜索