关于cordova + cordova-plugin-ble-central + vue 打包安卓App开发过程(爬坑)记录

  • 首先(必须)
  • 技术选型
  • 打包过程/环境配置错误处理
  • 打包并使用设备蓝牙
  • 打包应用
  • cordova 命令相关
  • 蓝牙插件 cordova-plugin-ble-central 应用开发
  • VUE 前端根页面 index.html
  • 编写/封装 & 撸 cordova 蓝牙插件应用js
  • 开始(vue项目内部)
  • 深入 bluebooth.js


相信很多人遇到过与我类似问题

首先(必须)

安装/配置java: [参考]()
安装配置Gradle:[参考]()
配置安卓环境:[参考]()

技术选型

Java:1.8+(必须)
Gradle:7.3+(必须)
Android Studio:2021.2+ (必须)(如果可自行手动配置SDK -- 跳过)
打包框架/工具:cordova
蓝牙插件:cordova-plugin-ble-central@1.4.4+
前端:vue2.0+ (前端开发请自行编码)

打包过程/环境配置错误处理

环境变量错误
ANDROID_SDK_ROOT=undefined (recommended setting) 
ANDROID_HOME=undefined
参考:

打包成功运行闪退



其他错误
https://cloud.tencent.com/developer/article/1901061

打包并使用设备蓝牙

安卓6.0以上需要开启系统定位才能使用蓝牙

打包应用

安装/配置:cordova [参考](https://cordova.apache.org)
其次(项目根www目录):添加平台 -- cordova platform add android --save (其他平台ios/bowser/windows)
添加蓝牙插件:cordova plugin add cordova-plugin-ble-central --save
配置蓝牙:项目根www目录package.json文件 添加
"cordova-plugin-ble-central": { // 大概在20行左右
        "ACCESS_BACKGROUND_LOCATION": true // 应用后台定位
 }

"dependencies": {  // 大概在30行左右
    "cordova-android": "9.0.0", // 兼容安卓版本的SDK版本号 可自行修改(前提已安装对应的SDK版本)
    "cordova-browser": "6.0.0",
    "cordova-ios": "6.1.1",
    "cordova-windows": "7.0.1",
    "cordova-plugin-ble-central": "^1.4.4" // 必须
 }

cordova 命令相关

cordova install android //将编译好的应用程序安装到模拟器上。
cordova emulate android //在模拟器上运行(前提是创建好AVD)
cordova serve android //在安卓手机运行
cordova build android //打包cordova项目到android平台。
cordova run android //通过USB直接安装到真机(该语句已经包括了build命令)
cordova run browser //运行在浏览器


VUE 前端根页面 index.html

必须在 <hdae> 添加 <script src="cordova.js"></script>
注意:在非蓝牙应用环境中可将其注释 免得 引用报错/报红 (无代码/控制台强迫症的 -- 跳过)

编写/封装 & 撸 cordova 蓝牙插件应用js

PS:JS前端高手 – 跳过

开始(vue项目内部)
1、新建:bluebooth.js 文件 -- 注释 必备的

/*
  **************************************************************************
  bluebooth.js cordova 蓝牙 cordova-plugin-ble-central
  **************************************************************************
*/
const bluebooth = {};
// todo 

export default bluebooth; // 导出/暴露

2、将其挂载到vue根实例上:main.js
import bluebooth from './bluebooth.js' // 引用路径因个人情况定
Vue.prototype.$bluebooth = bluebooth; // 应用到vue实例 - 方便于 this.$bluebooth 调用
深入 bluebooth.js
小试牛刀:
bluebooth.init = (data)=> {
	console.log('看看方法是否可用');
}

需要的地方:this.$bluebooth.init(data);

写在前面:非常重要
// 设备/文档就绪后 默认 检测蓝牙是否开启
document.addEventListener('deviceready', async () => {
    await ble.enable((res)=> {
        console.log("设备蓝牙开启成功!注意:安卓6.0以上版本需要开启定位功能才能使用蓝牙功能", res);
        }, (err)=> {
        console.log("设备蓝牙开启失败!", err);
        }
    );
});