《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

1、前言

在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在这种方式里主要通过设置maven仓库位置,设置编译选项、依赖版本在联网环境下下载对应SDK依赖包。

但是在网络情况不好的情况下这种方式就不行了,那怎么解决在离线环境或者内网环境实现开发流程呢?目前了解到的有两种方式:

1)配置内网环境maven仓库,预先缓存到内网环境下,然后离线调用。

2)采用直接拷贝引用方式,拷贝jar包、so库到对应第三方库支持位置,直接调用使用。

这两种方式各有各的优劣,看具体使用场景,在这里我们主要介绍第二种拷贝引用的方式。

2、离线部署流程

2.1、下载ArcGIS Runtime SDK for Android的SDK包

1) 登陆ArcGIS Runtime SDK for Android开发者资源中心。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

2) 登陆后点击下载按钮、在下载页面下载对应SDK包

 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

2.2、拷贝相关支持函数库到指定项目对应位置并添加引用

1)解压下载下来的zip包,SDK包中主要包含以下内容:

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

其中里面比较重要的有以下几项:
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文件夹下

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

将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文件夹下

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

3)在项目的../src/main文件夹下创建jniLibs文件夹,并将armeabi、armeabi-v7a、x86三个文件夹拷贝到jniLibs文件夹下。

 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

说明:其实这里关于如何在android studio配置java访问so库的方式有很好几种,在网上也有相关的说明博客,这里我是选了我认为相对最简单一种做了测试,并测试OK,所以用了这种方式。其他方式暂时没有测过

2.3、添加UI及代码信息

1)在布局文件activity_main.xml中添加mapview组件

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

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

在这里我们注意到环境并没有识别到com.esri.android.map.MapView类,并提示异常。切换项目显示方式为project。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

选中项目下app/libs/arcgis-android-api.jar右键设置Add As Library,添加之后“找不到com.esri.android.map.MapView类”的问题就没有了。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

同时我们查看app下的build.gradle,发现增加了一条编译选项,这里我们用代码的方式直接加在这里也是可以的。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

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);

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

2.4、设置应用程序权限

对于绝大多数的ArcGIS Android apps的应用几乎都需要网络的支持;也有一些应用可能会需要访问设备的sdcard,需要对该卡有读写的权限;除此对于GIS来说最常用的功能就是定位,应用应该具备定位权限。 ArcGIS Android apps的MapView使用了OpenGL2.x,所以在android应用程序的配置文件AndroidManifest.xml中还需添加 OpenGL的支持,因此应用的配置文件至少包含下面的配置信息:

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)
    <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" />
《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

2.5、编译运行应用程序

直接运行后我们还发现了这样的一个错误,提示需要忽略许可信息在打包选项中。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

打开build.gradle(Module:app)设置排除相关信息

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

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

重新运行编译,程序通过

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

文章若无特殊说明均为原创,原创作品,允许转载,转载时请务必以超链接形式标明文章出处、作者信息和本声明。
博客:http://www.cnblogs.com/gis-luq​ 作者:gis-luq 邮箱:luqiang.gis@foxmail.com

1、前言

在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在这种方式里主要通过设置maven仓库位置,设置编译选项、依赖版本在联网环境下下载对应SDK依赖包。

但是在网络情况不好的情况下这种方式就不行了,那怎么解决在离线环境或者内网环境实现开发流程呢?目前了解到的有两种方式:

1)配置内网环境maven仓库,预先缓存到内网环境下,然后离线调用。

2)采用直接拷贝引用方式,拷贝jar包、so库到对应第三方库支持位置,直接调用使用。

这两种方式各有各的优劣,看具体使用场景,在这里我们主要介绍第二种拷贝引用的方式。

2、离线部署流程

2.1、下载ArcGIS Runtime SDK for Android的SDK包

1) 登陆ArcGIS Runtime SDK for Android开发者资源中心。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

2) 登陆后点击下载按钮、在下载页面下载对应SDK包

 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

2.2、拷贝相关支持函数库到指定项目对应位置并添加引用

1)解压下载下来的zip包,SDK包中主要包含以下内容:

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

其中里面比较重要的有以下几项:
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文件夹下

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

将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文件夹下

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

3)在项目的../src/main文件夹下创建jniLibs文件夹,并将armeabi、armeabi-v7a、x86三个文件夹拷贝到jniLibs文件夹下。

 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

说明:其实这里关于如何在android studio配置java访问so库的方式有很好几种,在网上也有相关的说明博客,这里我是选了我认为相对最简单一种做了测试,并测试OK,所以用了这种方式。其他方式暂时没有测过

2.3、添加UI及代码信息

1)在布局文件activity_main.xml中添加mapview组件

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

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

在这里我们注意到环境并没有识别到com.esri.android.map.MapView类,并提示异常。切换项目显示方式为project。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

选中项目下app/libs/arcgis-android-api.jar右键设置Add As Library,添加之后“找不到com.esri.android.map.MapView类”的问题就没有了。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

同时我们查看app下的build.gradle,发现增加了一条编译选项,这里我们用代码的方式直接加在这里也是可以的。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

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);

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

2.4、设置应用程序权限

对于绝大多数的ArcGIS Android apps的应用几乎都需要网络的支持;也有一些应用可能会需要访问设备的sdcard,需要对该卡有读写的权限;除此对于GIS来说最常用的功能就是定位,应用应该具备定位权限。 ArcGIS Android apps的MapView使用了OpenGL2.x,所以在android应用程序的配置文件AndroidManifest.xml中还需添加 OpenGL的支持,因此应用的配置文件至少包含下面的配置信息:

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)
    <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" />
《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

2.5、编译运行应用程序

直接运行后我们还发现了这样的一个错误,提示需要忽略许可信息在打包选项中。

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

打开build.gradle(Module:app)设置排除相关信息

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

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

重新运行编译,程序通过

《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)