最近项目中有需要连接 USB 设备,App 运行在平板之上,只有一个 type-c 接口,只能通过 type-c 转串口进行连接,所以 App 直接接触的是 USB 设备。
使用 USB 设备遵照Google 官方文档开发即可。
那是一座悲欢离合聚集的楼。
最近项目中有需要连接 USB 设备,App 运行在平板之上,只有一个 type-c 接口,只能通过 type-c 转串口进行连接,所以 App 直接接触的是 USB 设备。
使用 USB 设备遵照Google 官方文档开发即可。
在项目中经常有这种需求:在打包时指定某些变量的值,比如渠道号、应用名称等。我们采用 Jenkins 进行打包构建,可以添加相应的参数,参数可以直接在打包脚本中使用,也可以在项目的 gradle 文件中使用。下面以动态改变端口号,举例进行说明。
在 Jenkins 构建的设置中,添加变量PORT_NAME
,做成选择项(固定的变量尽量避免人为错误),然后添加一下说明。这个变量可以在 Build 配置中的 Execute shell 中使用,当前场景不需要,只需要配置即可。
最近做的项目是个新项目,早期为了快速迭代实现需求,在混淆这块没做过处理。最近打算上 release 包,混淆这块肯定还是需要的。
在 App Module 的 build.gradle 文件中配置开启混淆:1
2
3
4
5
6
7release {
signingConfig signingConfigs.release
minifyEnabled true
multiDexEnabled = true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
resValue("string", "build_type", "debug")
}
将整个 python 工具写好之后,最后一步便是生成 exe 文件提供给 Windows 电脑使用了,可以使用 pyinstaller 生成。这里需要注意个坑:MacOS 只能生成 MacOS 对应的可执行文件,所以若要生成 exe,需要切换到 Windows 平台。
安装 PyInstaller,然后进入到需要打包的 .py 文件所在文件夹,执行 cmd 指令:pyinstaller -F -w xx.py。
打包是很容易了,但是能正常运行则需要运气。使用 pyCharm 可以正常运行 py 文件,但是打成 exe 后运行直接崩溃。所以第一步:接入异常提示。
1 | try: |
获取到提示后,下一个错误就来了。
more >>继上篇文章,获取到序列号后,接下来就是得打印了。python 里使用打印,可以直接使用PyQt5.QtPrintSupport。
获取打印机列表:1
2
3
4
5
6
7
8def printerList():
printer = []
printerInfo = QPrinterInfo()
print('availablePrinterNames', printerInfo.availablePrinterNames())
print('defaultPrinterName', printerInfo.defaultPrinterName())
for item in printerInfo.availablePrinters():
printer.append(item.printerName())
return printer
最近的项目涉及到硬件,硬件由工厂生产,生产之后需要连接到电脑,然后执行检测程序。检测程序需要做两件事:
后面硬件装箱时,贴上此标签,通过服务器就可以知道一个序列号对应的具体硬件是哪一个了(排除人为标签贴错的情况)。那么,现在就是需要做这样的一个检测工具,运行在 windows 平台。
more >>通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。
在大多数情况下,视图绑定会替代 findViewById。
只能在 Android Studio 3.6 Canary 11 及更高版本中使用。1
2
3
4
5
6android {
...
viewBinding {
enabled = true
}
}
启用后,会根据 xml 名称生成一个驼峰命名,结尾带上 Binding 的绑定类。例如:result_profile.xml,会生成 ResultProfileBinding 的绑定类,这个绑定类 getRoot 方法返回根布局,xml 中所有有 id 的 View 也能通过此类直接获取。相比于 kotlin-android-extensions,它不会空指针,并且 id 唯一。kotlin-android-extensions 直接获取对应 id 的 view 有可能导致空指针。另一点,如果我们很多 xml 里的 id 有一样的命名,会很难区分。且如果一个页面引用了 2 个 xml,这 2 个 xml 里是不能使用同样的 id 的,编译器会不知道要去找哪个 id 从而报错,而使用 viewBinding 这些便都解决了。
more >>最近项目有需要用到串口通信,硬件同事通过串口给应用层发送数据,稍微记录一下。
串口通信(Serial Communications)是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。串口通信是计算机中非常常见的通信方式,比如一些有线鼠标、键盘、打印机等都是通过串口进行通信的。串口的通信一般使用3根线完成,分别是地线、发送线(tx)、接收线(rx)。
串口中有五个重要的参数:串口设备名、波特率、奇偶校验位、数据位、停止位。
日常开发中经常会有如下需求:
ViewPager 左右突出,实现起来非常简单:1
2
3
4
5
6<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingLeft="48dp"
android:paddingRight="48dp" />
添加 padding、clipToPadding 即可。
现在还有几个需求:
马上就要过年了,这几天公司的人越来越少,而我打算坚守到最后一天,虽然事情比较少,但也能稍微自己看点东西,充充电。然而,项目发布的 App 在华为渠道被拒了,原因是:在登录页的隐私协议,不能默认勾选上。然后我看到了这样的代码:1
2
3
4
5
6
7
8
9
10
11
12<CheckBox
android:id="@+id/check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@null"
android:checked="true"
android:drawableLeft="@drawable/account__protocol_agree"
android:drawablePadding="7dp"
android:enabled="false"
android:text="同意"
android:textColor="#333333"
android:textSize="12dp" />
tag:
缺失模块。
1、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
2、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: true raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true