- 创建plugin
cordova项目中:
plugman create --name QRPrinter --plugin_id wesunsoft-blu-qrprinter --plugin_version 0.0.1
- 添加安卓平台支持
插件目录下:
plugman platform add --platform_name android
- 文件夹目录
src 各平台源码文件
www js接口文件
plugin.xml 配置文件
- 插件安装卸载
卸载插件
plugman uninstall --platform android --project platforms/android --plugin [这个插件的id,可在plugin.xml中查看]
安装插件
plugman install -d --platform android --project platforms/android --plugin [这个插件的全路径]
src下的源码会按照plugin.xml中的配置被拷贝至相应platform的目录下面。
- 开发
- 打开activity
- R包路径
R包路径为项目安卓包路径,使用以下代码,动态获取R包路径。
public static int getResourceByName(Context context, String className, String resName) {
String packageName = context.getPackageName();
int id = 0;
try {
Class r = Class.forName(packageName + ".R");
Class[] classes = r.getClasses();
Class desireClass = null;
for (Class cls : classes) {
if (cls.getName().split("\\$")[1].equals(className)) {
desireClass = cls;
break;
}
}
if (desireClass != null) {
id = desireClass.getField(resName).getInt(desireClass);
}
} catch (Exception e) {
LogUtil.e("getResourceByName",e);
e.printStackTrace();
}
return id;
}
- 修改plugin.xml
- plugin.xml中添加安卓权限权限,注册activity。
parent指添加的父节点
- 修改插件包路径
QRPrinter路径与source-file所写路径对应
- 引入jar包
- 引入maven,依赖包
- 源码文件至target-dir位置
- 移动资源文件至target位置
- 插件调用
标签clobbers中定义的cordova.plugins.QRPrinter即为js调用的方法名称。
- 遇到的问题
- 使用cordova plugin add [这个插件的全路径] 添加插件报错
原因:
插件缺少package.json文件
解决:
npm init 初始化package.json文件
- 编译失败,报如下错误:
原因:
如果有 Cordova 插件使用了 com.android.support:xxxxx-v7:+ 这种不带版本号的方式引入 Android Support 库,那么最新的 com.android.support v28 就会被用上,但是 cordova 目前还不支持 28 的 Support 库
所以报错。
解决:
修改有问题的插件,改成 com.android.support:xxxxx-v7:27+ 或者其他小于 28 的版本
- 编译失败,报如下错误:
原因:
存在重复的包
解决:
全局搜索,查看哪些包中使用到了,如下:
Core-2.3.0.jar及barcodescanner-release-2.1.5.aar中都存在com.google.zxing.BarcodeFormat。删除core-2.3.0.jar包,只留下barcodescanner-release-2.1.5.aar中的。
删除gradle中的依赖
- 编译成功,连接蓝牙成功,无法打印。
- 缺libCode.so文件
解决:
sourceSets重定向jniLibs路径。
- 调试报错 arm64-v8a下找不到libCode.so文件。
原因:
如果不添加ndk的选项描述,那么androidstudio默认打包会产生所有的平台so文件包,如果没有相应的so文件那么就会导致程序报错:找不到so文件在某个目录下。因此我们需要根据现有的什么类型的so文件进行配置ndk。
解决办法:
build.gradle中,添加红框中内容。
https://blog.csdn.net/weixin_36570478/article/details/81079815
https://blog.csdn.net/duoduo_11011/article/details/83745598