按照一个大佬的博客(https://www.cnblogs.com/gis-luq/p/4760370.html)的方法进行在线环境部署,其中arcgis runtime for android的maven仓库改为:
// Our internal artifactory repository
maven {
url 'https://esri.jfrog.io/artifactory/arcgis'
}
添加ArcGIS Android的依赖为:
implementation 'com.esri.arcgis.android:arcgis-android:10.2.9'
其它的代码参考该博客。发现arcgis runtime for android10.2.9 SDK生成的apk在32位的android设备上能跑 ,在64位的android设备上一运行就闪退。
在androidstudio的终端(Terminal)中通过adb shell getprop ro.product.cpu.abi命令可以查看当前android调试设备的cpu。
例如:
Microsoft Windows [版本 10.0.18363.1500]
(c) 2019 Microsoft Corporation。保留所有权利。D:\test1029>adb shell getprop ro.product.cpu.abi
arm64-v8a
报的错误信息如下:
错误一:
Cause:invalid type code:69
解决思路:
在app模块的build.gradle文件中添加ndk版本即可。例如:
ndkVersion "22.0.7026061"
错误二:
Caused by: android.view.InflateException: Binary XML file line #9 in cn.test.test1029:layout/activity_main: Binary XML file line #9 in cn.test.test1029:layout/activity_main: Error inflating class com.esri.android.map.MapView
Caused by: android.view.InflateException: Binary XML file line #9 in cn.test.test1029:layout/activity_main: Error inflating class com.esri.android.map.MapView
Caused by: java.lang.reflect.InvocationTargetException
.................................
“Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/cn.test.test1029-rRh6gKmLekUFqq9TqrVLmw==/base.apk"],nativeLibraryDirectories=[/data/app/cn.test.test1029-rRh6gKmLekUFqq9TqrVLmw==/lib/arm64, /system/lib64, /system/product/lib64, /hw_product/lib64, /system/product/lib64]]] couldn't find "libruntimecore_java.so"”
解决思路:
这是由于我的android设备的CPU是64位导致的,通过在app模块下的build.gradle文件中添加下述abi过滤解决该报错。
关于Android so库兼容问题,可以参考文末的参考资料。
ndk {
abiFilters 'armeabi-v7a'
}
错误三:
但是这时运行app,它又报了另外一个错误,
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.params.BasicHttpParams" on path: DexPathList[[zip file "/data/app/cn.test.test1029-OkEvlKQ2fophMYWZ1a__Pw==/base.apk"],nativeLibraryDirectories=[/data/app/cn.test.test1029-OkEvlKQ2fophMYWZ1a__Pw==/lib/arm, /data/app/cn.test.test1029-OkEvlKQ2fophMYWZ1a__Pw==/base.apk!/lib/armeabi-v7a, /system/lib, /hw_product/lib]]
解决思路:
在清单文件清单再加一句代码解决。
<application
android:usesCleartextTraffic="true">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</application>
最终能够成功运行
最终的代码如下:
https://gitee.com/gislaozhang/test1029
参考资料:
https://blog.csdn.net/weixin_30466953/article/details/96171464 关于ArcGIS Android的在x86和x64系统中兼容性的问题与解决方案
https://blog.csdn.net/wang_yong_hui_1234/article/details/100603881 Android so库兼容问题
https://mp.weixin.qq.com/s/jnZpgaRFQT5ULk9tHWMAGg 为何大厂APP如微信、支付宝等只适配了armeabi-v7a/armeabi?
https://www.jianshu.com/p/342689756022 Android9.0 java.lang.ClassNotFoundException: Didn't find class "org.apache.http.params.BasicHttpP...