Android 原笔迹手写控件,压感,笔锋不可少!

手写控件相关文章:http://kevinems.com/tag/%E6%89%8B%E5%86%99

本人在好记星平板电脑 N818S 上开发的原笔迹手写控件,压感,笔锋都实现了,笔迹保存,还原,删除,放大,缩小,旋转,移动功能也实现了,控件的API简单易用,可以说是一个比较完善的控件了,并集成到 Framework,小有成就感啊。

当初需求统计,分析是就认定是一个相对复杂的控件,所以前期做了不少工作,后期编码实现的时候相对还算比较顺利。

这是第一次真正意义上遵循了标准的软件开发流程,开发效率果然提高不少。科学的开发方法,事半功倍。

流程大概:

  1. 需求统计
  2. 需求分析
  3. 概要设计
  4. 详细设计
  5. 编码
  6. 测试
  7. 软件交付
  8. 软件维护

平台:好记星 N818S,Android 4.2,汉王电磁屏,电磁笔

笔触效果:钢笔,铅笔,马克笔,毛笔

效果图:

一个终端培训师的作品~~~

PaintView

welcome

继续阅读Android 原笔迹手写控件,压感,笔锋不可少!

SeetaFace2AndroidDemo 扩展,支持 arm64 架构

最近在研究基于 Android 平台的人脸识别,seetaface2 开源算法是知名度比较高的一个,github 上有比较完善的代码,但是推荐的 Android demo 只支持 arm32 平台,研究了一下,编译了 arm64 位的库,方便在目前的主流手机上进行测试。在这里记录一下,有兴趣的可以 github 查看,地址如下:

https://github.com/kevinems/SeetaFace2AndroidDem

Readme:
这是中科视拓开源项目SeetaFace2的android示例

由于模型文件较大,需要用户自己去下载然后放到app模块的assets目录下,或者/sdcard/seeta/model目录下。 记得修改一些环境变量为你自己的配置环境,如ndk、cmake等,祝好运。

====================================================

kevinems: 在原作者的基础上,修改如下,具体可以查看修改记录:

  1. Android Studio 4.0 上编译通过。
  2. 使用重新编译的 seetaface2 的库,并支持 arm64。(原项目没有提供 arm64 库,所以在目前的主流手机上都跑不了)
  3. demo 修改为使用后置摄像头。

Android apex 学习总结

最近对 apex 文件进行了大致的了解,其中主要涉及到安全方面的学习,在这里跟大家分享一下:

  1. apex 是什么?
    Android Pony EXpress (APEX) 是 Android 10 中引入的一种容器格式,用于在较低级别系统模块的安装流程中使用。此格式可帮助更新不适用于标准 Android 应用模型的系统组件。一些示例组件包括原生服务和原生库、硬件抽象层 (HAL)、运行时 (ART) 以及类库。
  2. apex 文件的构成
    apex_manifest.json, AndroidManifest.xml, apex_payload.img,apex_pubkey
    其中我们需要关注的是 apex_payload.img和 apex_pubkey。
    apex_payload.img 是由 dm-verity 支持的 ext4 文件系统映像。各种原生常规文件包含在 apex_payload.img 文件中。
    apex_pubkey 是用于为文件系统映像验签的公钥。
  3. apex 如何生成?
    apex 在 Android 源码编译,需要进行相应的配置,然后编写相关的模块编译文件 Android.bp,最终编译生成 unflatten 的 apex 文件。
  4. apex 文件如何安装?
    通过 packageInstaller 或者 adb 等安装工具安装。
  5. apex 如何验签?
    apex 有两层的签名,第一层,首先 apex 其实也是一种 apk 文件,所以系统会对 apex 整体进行一次签名,签名和验签过程与 apk 一样。
    第二层,apex 中 apex_payload.img的 vbmeta 描述符中包含哈希树,通过 dm-verity 来验签。/system 分区下的 apex 文件通过 dm-verity 保证安全;/data 中的 apex 文件在启动时, 由 apex 服务来进行验签,验签原理与 dm-verity 一致。
  6. 我们的系统支持 apex 更新吗?
    目前 msm8937 的 sdk 中并没有启用 apex 更新功能。启动这个功能需要相关的配置,并重新编译系统。
    而添加支持的方式也很简单,在 {device.mk} 中添加一下语句,同时配置各个服务的 rc 文件,使服务支持 apex 更新。
    $(call inherit-product, $(SRC_TARGET_DIR)/product/updatable_apex.mk)
  7. 供应商系统有必要启动 apex 更新支持吗?
    个人认为没必要。apex 目前支持的更新模块主要 Google 核心运行时库,而这些更新更多是由 Google 来做支持。

最近在线教育有点火

最近由于新冠肺炎疫情的影响,学校无法按时正常开学,在线教育就火起来了。没办法啊,减少接触,只能选择在线教育了。无奈。

在线教育相关的在线课堂,电子书包等项目,也催生了对手写技术的需求,最近就有不少人跟 Kevin 打听原笔迹手写的相关技术。

但愿疫情早日过去,大家可以放心地外出游玩。武汉加油,深圳加油!


读书笔记:深入理解Android卷I

闲来无事,重新系统地学习一下 Android 系统的整个框架,《深入理解Android卷I》这本书之前貌似有看过,但是那时对 Android 的理解尚浅,有很多地方都没有理解,现在重读,相信一定能对 Android 系统原理有更加深入的理解,“学而时习之,不亦说乎”。

书籍的具体章节,这里就不重新码字了,有兴趣的可以自己看看。这里只是记录自己读书的一些新的发现以及心得。

虽然这本书的内容是居于 Android 2.2 的,但是 Android 的很多编程理念,原理还是相通的。

继续阅读读书笔记:深入理解Android卷I

更新云服务器

最近阿里云的 ecs 主机老是内存不足,博客卡顿的很,一直找不出时间好好折腾折腾,就趁着春节假期把操作系统升级了。新型肺炎作怪,没办法出去浪了,就好好折腾一下吧。

主要升级是把系统从 ubuntu14.04 升级到了 ubuntu18.04。18.04自己一直在用,没有遇到什么问题,升级到18.04,也不至于太落后于时代了。另外一个原因是 ubuntu14.04 无法升级 php 到5.6以上版本,而新版的 wordpress 需要升级 php 到5.6以上版本,所以升级到18.04是迟早的事情。

另外把 apache 改为 nginx,nginx 对内存的需求稍微小一点,对于云主机那可怜的内存,更加适合。

git 服务器也一并搭建好了,这个就轻车熟路了。关于密钥登陆功能,对密钥的使用原理,经过这几年对签名验签的学习,终于理解了,就是一对密钥,私钥放在本地,公钥放在服务端,加密解密的过程。

为了节省可怜的1G内存,还开启swap虚拟内存,尽管看着效果不是很明显。

wordpress 评论的邮件通知功能,听说会跟静态cache冲突,放弃了。

目前就这些了,不折腾其它功能了,毕竟服务器还是稳定为先。


2019小总结

工作:
2019年工作中的主要任务是5.1的维护,以及年初7.1,后来的9.0,以及目前的Android的10.0的预演,偶尔支援一下其他项目。
Android 方面,预演的过程中,对Android的编译系统更加了解,同时对Android新版本的变更有更深入的了解,例如安装应用的流程,以及更严格的 selinux 策略,新的avb验签流程,以及project treble架构等。Android 7.0、9.0、10.0的变化的确挺大,提前的项目预演有助于项目的成功。
其他方面,偶尔会支援一下其他项目,编译web系统,对 python 有了更深一步的学习。

继续阅读2019小总结

光大银行惊现原笔迹手写控件

前两天去光大银行办理业务,签字的时候,光大银行用的是手写签字板。我签字的时候,发现光大银行的手写签名的效果还是挺好的啊,跟我的手写控件的效果有得比啊。于是认真观察一下,哇,这不是跟我的手写控件的效果一模一样的效果么?这笔锋,这流畅度,这搬圆滑的曲线,真的很像很像。

可惜那时没有拍个照片,回来好好对比。后来想想的确有可能是我的手写控件,因为之前的客户有提过他们会给各个银行提供手写板方案,所以很有可能是客户把这个手写控件应用到银行的签名系统了。


原笔迹手写控件还可以这样玩–绣花机

更多内容,可以查看相关文章:原笔迹手写技术与智能绣花机的第一次亲密接触

以下是原笔迹手写控件在绣花机上的实例应用,实例中的手写效果没有使用压感屏,如果配合电磁屏的平板设备,效果会更好。


Android 9.0 系统开发要注意的事项

如果说 5.1 到 7.1 是一道小坎。那 7.1 到 9.0 就是一道大坑,有很多需要注意的问题,下面简单记录一下。

1. 编译

编译工具链需要使用 64 位的,NDK, JDK 需要使用 64 位的,前期的 buildroot 集成的那些工具,也要更新为新的 64 位的,不然会出现各种奇怪的编译问题。

还有就是新的编译框架 NINJA。

之前有提过,7.1 有启用过 jack,但是现在 9.0 上已经完全看不到 jack 了。

8.0 开始,Android 引入了 Android.bp 来代替之前的 Android.mk。而 Android.mk 也同时支持,但是相信以后的版本,mk将会慢慢消失(所以我们要开始学习 bp 文件的编写,bp 文件的编写,会更加简单和明了)。

我们需要大概知道,编译系统会通过 soong 将 Android.bp 转化成 ninja 文件;所有的 makefile(mk文件)也会转化成 ninja 文件,然后两个 ninja 文件合并成一个文件,最终的编译,就是依赖这个 ninja 文件。

至于编译系统ninja,简单来说,就是一个专注编译速度的编译系统,更多资料可以参考 https://ninja-build.org/

继续阅读Android 9.0 系统开发要注意的事项