目录
- 1.安卓开发常用术语介绍
- 2. 各种SDK的安装(陆续补充ing)
- 2.1 JDK的安装
- 2.2 单独安装Android SDK部分组件
- 2.3 Android NDK的安装
- 3. python+minicap实现andriod截图实例
- 4. TODO
1.安卓开发常用术语介绍
-
IDE (Integrated Development Environment) : 集成开发环境,提供程序开发环境的应用程序,即编程的地方。一般包括代码编辑器、编译器、调试器和图形用户界面,比如Java的InterlliJ IDEA、Python的Jupyter和Pycharm。
-
SDK (Software Development Kit) : 软件开发工具包,辅助开发某一类软件的相关文档、API必需资料、范例和工具的集合都可以叫做 “SDK”。Android SDK为开发者提供了库文件以及其他开发所用到的工具,其和IDE组合就成了开发环境。
- Android SDK是Java语言
- 除了安卓开发中的Android SDK,还有其他平台和技术的SDK。例如,iOS开发使用的是iOS SDK,用于开发苹果设备上的应用程序。还有微软的Windows SDK,用于开发Windows操作系统上的应用程序。还有针对特定硬件和软件的SDK,如游戏开发中的Unity SDK和Unreal Engine SDK。
- SDK通过提供API让开发者可以使用现成的函数、类、方法和属性,更轻松地访问底层功能、集成第三方服务和构建应用程序。
-
NDK (Native Development Kit) :属于SDK的一种。针对Android平台的一种开发工具包,它允许开发者使用C、C++和其他本地编程语言来开发Android应用程序的一部分或全部功能。
- Android应用程序开发通常使用Java编写应用程序的高级逻辑和界面。但NDK是基于C语言的。其实Android也可以不使用NDK,但这就需要开发操作完全在Java语言的范畴内,不能调用C/C++的第三方库。但是如果涉及到比较底层的部分, C/C++语言是避不开的,比如说想要直接操作内存。NDK使得开发人员可以对C/C++的第三方库进行操作编译。
- NDK提供的工具和库使开发者能够将C/C++代码与Java结合使用。开发者可以使用NDK编写本地代码模块(Native Code Modules),然后通过JNI(Java Native Interface)将其集成到Android应用程序中。
- 优势:在某些情况下,比如图像和音频的处理、游戏开发测试、访问摄像头\传感器\蓝牙\NFC等硬件功能,使用本地编程语言可以提供更好的性能、访问底层硬件或利用现有的C/C++库。
- 劣势:使用NDK开发的本地代码模块需要处理更多的复杂性,包括手动内存管理和跨平台兼容性(架构兼容性、本地库和功能依赖性等)。
-
JDK (Java Development Kit) :是面向Java开发人员使用的SDK。
- IntelliJ IDEA 可以与 JDK 集成,但它本身并不包含 JDK,而是依赖于 JDK 的安装和配置。IntelliJ IDEA 可以 JDK 提供的编译器和虚拟机来编译和运行 Java 代码,以便开发者可以在 IDE 中轻松地配置和管理 JDK,并使用 JDK 提供的功能进行开发。
2. 各种SDK的安装(陆续补充ing)
后续发现还是用Andriod Studio进行进行管理更方便。
2.1 JDK的安装
安装过程参考JDK的下载与安装(详细过程)
如果出现javac无法运行参考windows 10 java命令可以运行,但是‘javac‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件(已解决)
2.2 单独安装Android SDK部分组件
Win10 配置ADB安装2023.7.12版本
2.3 Android NDK的安装
Win10 配置NDK安装2023.7.19版本
3. python+minicap实现andriod截图实例
原本winn10配置minicap需要安装git、ndk、adb等,参考在Windows下编译与运行minicap,很麻烦。参考使用minicap+python实现录屏功能中利用airtest实现。
-
pip install airtest
airtest是网易开源的一款基于 Python 的、跨平台的UI自动化测试框架。 -
代码
import cv2 import airtest.core.api as air_api from airtest.core.helper import G def init_device(): # auto_setup(basedir=None, devices=None, logdir=None, project_root=None, compress=None) # auto_setup 是一个用来初始化环境的接口, # 5个参数可以设置当前脚本所在的路径basedir、指定运行脚本的设备devices、设置默认的log路径logdir、设置脚本父路径方便 using 接口的调用和屏幕截图的压缩比率。 # 可设置脚本运行时的log保存路径,默认值为None则不保存log,如果设置为True则自动保存在<basedir>/log目录中。 print(__file__) air_api.auto_setup(__file__, logdir=True, devices=["Android:///", ]) # 如果当前文件包含在 sys.path 里面,那么 __file__ 返回一个相对路径 # 如果当前文件不包含在 sys.path 里面,那么 __file__ 返回一个绝对路径(此处我的文件不包含在sys.path中) def img_scale(image, size=612): # 输入你想要resize的图像高。 height, width = image.shape[0], image.shape[1] # 等比例缩放尺度。 scale = height / size # 获得相应等比例的图像宽度。 width_size = int(width / scale) # resize image_resize = cv2.resize(image, (width_size, size)) return image_resize def resolution_log(): # 以手机屏幕为例,iphonex像素分辨率为1125x2436,是指屏幕横向能显示1125个物理像素点,纵向能显示2436个物理像素点。 width = G.DEVICE.display_info['width'] height = G.DEVICE.display_info['height'] print('device independent pixels:', width, '×', height) def lp_screen(): if G.DEVICE.display_info['orientation'] in [1, 3]: print('landscape') height = G.DEVICE.display_info['width'] width = G.DEVICE.display_info['height'] else: print('portrait') height = G.DEVICE.display_info['height'] width = G.DEVICE.display_info['width'] def snap2show(show=True): img = G.DEVICE.snapshot() if show: img = img_scale(img) cv2.imshow("src_image1", img) cv2.waitKey(0) if __name__ == '__main__': init_device() # 初始化设备 lp_screen() # 查看屏幕状态:横屏landscape or 竖屏portrait resolution_log() # 查看分辨率device independent pixels import time s = time.time() snap2show(show=False) e = time.time() print('snap time:', e - s)
-
效果演示:
截图效果:
4. TODO
- 自学一下airtest框架,看看源码、使用文档
- 为什么airtest里的minicap截图仍然需要3.02s?看网上说minicap为0.8秒,对不上,需要看看airtest是怎么使用minicap的。
通过调试,在console里面进行,只需要0.2~0.3s,应该是完整运行时是第一次启动(手机中minicap相关进程第一次启动用时可能较长,启动后用minicap向手机进行请求时就只需要截图时间了)