NativeScript APP 开发备忘
devtools 调试断开
命令ns debug android可以开启浏览器的调试页面,非常方便。一开始使用功能非常完整,包括元素、日志、代码和网络,后来用着用着,发现元素和网络没了,剩下日志和代码可用,再后来用着用着,连日志和代码都没了,一进入 devtools 就提升已经断开。
后来经同事提醒,把devtools://devtools/bundled/inspector.html?ws=localhost:40000改为devtools://devtools/bundled/inspector.html?ws=127.0.0.1:40000即可,但是元素和网络还是没有回来,不知哪里的问题。
Mac OS 下安装
Electorn 下载卡住了
这跟 win 下安装 npm 依赖还是有点区别的。主要是这个 Electorn,也不知道 ns 为什么会依赖它。下载时候无聊 npm 源还是国内的源都会遇到一个网络请求超时npm error RequestError: read ECONNRESET的问题:
有时还遇到RequestError: connect ETIMEDOUT 20.205.243.166:443,总之就是网络问题,但这在 win 上却却是没有的。后来没辙了,从 win 拷贝 node_module 过来算了。幸好无论 win/mac,node_module 都是一样的。
启动模拟器问题
先启动安卓模拟器,发现报错:Unable to apply changes on device: emulator-5554. Error is: spawn /Users/zhangxin/code/xxx/xxx-app/platforms/android/gradlew EACCES.
原来是没权限,进入目录/Users/zhangxin/code/xxx/xxx-app/platforms/执行下面命令即可:
chmod755android/gradlewMarketplace 市场
https://market.nativescript.org
模拟器黑屏
在 Android Studio 里面把模拟器还原才行。
真机调试
安卓真机调试
首先开启你手机的“开发者选项”–“USB 调试”。每个厂家的手机设置方式不尽相同,这里不再赘述。
设置成功之后,通过 adb 命令可以查看是否连接成功:
adb devices使用 NativeScript 的命令亦可:
ns devices android原生代码调用 NativeScript
NativeScript 代码调用 Java/Kotlin/Swift/Obj-C 代码非常简单粗暴,但是反过来呢?Java/Kotlin/Swift/Obj-C 代码调用NativeScript 代码呢?抱歉~这个没有直接支持,可以说原生程序压根不知道有 ns 寄居于它上面生存,没有一个接口可以让原生程序调用 ns。
不过没有接口,我们就提供一个呗。~这个思路是可行,我们传入一个interface接口让 Java 执行便可。官网有介绍实现 Kotlin and Java 接口的方法。
button.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){// Perform action on click}});ns 实现 Java 接口
button.setOnClickListener(newandroid.view.View.OnClickListener({onClick(){// Perform action on click},}),)安卓编译打包减肥
其实打包一种平台的即可,就是arm64-v8a,老掉牙的armeabi-v7a无须再支持,x86 的份额太小。
减肥后我的 app 从100M减小到37M!
修改build.gradle只保留arm64-v8a,如果没效果就修改platforms\android\app\build.gradle。
在NativeScript中接收仓库条码扫描枪的数据
核心的解决方案就是使用Application.android.registerBroadcastReceiver
要在 NativeScript 应用中接收 Android 设备扫描的条码数据,你可以按照如下方式在Android应用程序实例上调用registerBroadcastReceiver方法:
constreceiverCallback=(context:android.content.Context,intent:android.content.Intent)=>{this.articleCode='';this.articleCode=intent.getStringExtra('DATA');// 这里可以使用任何事件总线// 我只是用了自己创建的一个简单的系统设置this.$emit('barcodeScanned',{barcode:this.articleCode});};Application.android.registerBroadcastReceiver('com.android.serial.BARCODEPORT_RECEIVEDDATA_ACTION',receiverCallback);registerBroadcastReceiver的第一个参数是由设备厂商提供的intent过滤器。我开发的设备来自Seypos公司,他们提供了com.android.serial.BARCODEPORT_RECEIVEDDATA_ACTION这个intent过滤器。
第二个参数是一个回调函数,用来获取扫描到的条码数据,以便在应用程序的其他部分使用。
https://blog.nativescript.org/receive-barcode-from-a-pda-in-ns/
