公司有一个用ionic做的跨平台框架,最近有个需求需要我来参与修改,搞了几天,感觉所有的坑都踩了一遍。在这里记录分析一下此次踩的坑,同时以后遇到插件安装后安卓端无法调用成功的时候,可以跟着此次的方式处理一下。
一.以高德地图定位插件为例子cordova-plugin-yzt-amap
1.插件安装 cordova plugin add cordova-plugin-yzt-amap --variable API_KEY_FOR_ANDROID="YOUR_ANDROID_API_KEY_IS_HERE" --variable API_KEY_FOR_IOS="YOUR_IOS_API_KEY_IS_HERE"
2.插件使用 cordova.plugins.AMapPlugin.getCurrentPosition(
data => {
let { longitude, latitude } = data;
this.nativeService.showToast(`${longitude},${latitude},${JSON.stringify(data)}`);
},
err => {
// fail
// console.log(err);
}
);
一般来说这样使用是没有问题的,但是遇到当前的安卓目录与插件开发者的目录不一致的时候,就会出问题了,调用这个插件会发现是undefine.
首先要理解安装插件框架帮我们做了什么事,才能分析到这个插件为什么用不了,和如何处理。
通过cordova plugin add命令,ionic根据插件里配置的plugin.xml来进行解析,把源码,资源文件,mainfest文件进行拷背。
如:<source-file src="src/android/AMapPlugin.java" target-dir="src/com/yxt/cordova" /> 就是把插件里面的AMapPlugin.java拷到安卓打包时候的目录。有些插件如果这里的target-dir为“app/src/main/...”则会导致该文件不会打包进去,导致插件不可用。资源文件和mainfest文件同理。
当插件调用不成功时,可以用以下方法跟踪。打开android/build目录,例如下图:找一下有没有对应生成的class文件就可以了。如果没有,则要修改target-dir到ionic真正打包的目录就可以了。