关于使用高德安卓api时so文件的坑
很久之前,我用高德安卓api开发,将相关内容全部挤在主项目下,包括amap的依赖,以及专有的so文件等。
有一天,我把amap相关的操作全部打包成了一个lib。拆包出来方便管理。
又过了几个月,新建了一个project要写assignment。就想着把之前打包好的lib直接拿过来用,然后就出现了地图相关全黑屏,logcat狂跳以下报错的情况:
2025-05-23 19:52:17.109 10854-10854 ou.trackllector com.xxx E No implementation found for void com.autonavi.base.ae.gmap.GLMapEngine.nativeMainThreadTrigger(int, long) (tried Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeMainThreadTrigger and Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeMainThreadTrigger__IJ)
2025-05-23 19:52:17.109 10854-10854 System.err com.xxx W java.lang.UnsatisfiedLinkError: No implementation found for void com.autonavi.base.ae.gmap.GLMapEngine.nativeMainThreadTrigger(int, long) (tried Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeMainThreadTrigger and Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeMainThreadTrigger__IJ)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at com.autonavi.base.ae.gmap.GLMapEngine.nativeMainThreadTrigger(Native Method)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at com.autonavi.base.ae.gmap.GLMapEngine.triggerMainThread(GLMapEngine.java:268)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at com.amap.api.col.3sl.l$1.handleMessage(AMapDelegateImp.java:656)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at android.os.Handler.dispatchMessage(Handler.java:106)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at android.os.Looper.loopOnce(Looper.java:201)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at android.os.Looper.loop(Looper.java:288)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at android.app.ActivityThread.main(ActivityThread.java:7924)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at java.lang.reflect.Method.invoke(Native Method)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
2025-05-23 19:52:17.110 10854-10854 System.err com.xxx W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
最开始只是怀疑我的包兼容性有问题,因为最开始封包的时候没有经过充分测试。跟着debug找了半天,发现最怕的null没有出现,然后把报错扔给了ai,ai是gradle里面没有加jniLibs相关,即:
android {sourceSets {main {jniLibs.srcDirs = ['src/main/jniLibs']}}
}
由于之前的项目好久没有管依赖相关了,就那jniLibs为关键词双击shift查了下,没有相关内容,就怀疑和这个没有关系。so又是可能一年多前加的,就彻底把它忘了。随后找了半天发现还是不对,翻开了原项目的app/src/main/目录,发现其下有一个jniLibs的东西(这个东西默认就是在src/main/目录下,系统会自动识别,如果不在才需要手动指明)。里面打开正是之前导入高德api时候附带的so文件。
随后,把jniLibs移到对应的lib的src/main/目录下后,问题解决。
ps:期间被ai误导说gradle版本7以下才不需要手动声明,然后查了半天版本。发现我原版本本来就已经是7以上了,后面又因为文件移动错误折腾了半天。