当前位置: 首页 > article >正文

告别Appium!用Python+UIAutomator2搞定Android自动化测试(附完整环境搭建与实战代码)

PythonUIAutomator2Android自动化测试的高效实践指南在移动应用测试领域效率与稳定性始终是工程师们追求的核心目标。传统方案如Appium虽然功能全面但在执行速度和资源消耗方面往往难以满足高频测试需求。本文将带您探索基于Python和UIAutomator2的轻量化解决方案从环境搭建到实战演练完整呈现如何构建快速响应的自动化测试体系。1. 技术选型为什么选择UIAutomator2在Android自动化测试领域技术选型直接影响测试效率和维护成本。让我们通过几个关键维度对比主流方案执行效率对比表框架类型平均执行速度CPU占用率内存消耗Appium1x高高UIAutomator23-5x中低Espresso5-8x低极低注基准测试在相同设备Pixel 4Android 11上执行相同测试用例UIAutomator2的独特优势体现在原生支持直接调用Android系统级API无需额外转换层Python生态可利用丰富的Python库扩展测试能力跨应用测试支持多应用交互场景而Espresso仅限于当前应用无需源码与Espresso不同不需要访问被测应用源代码实际项目中我们曾用UIAutomator2将300个测试用例的执行时间从47分钟压缩到9分钟同时减少了80%的脚本维护工作量。2. 环境搭建从零开始配置测试环境2.1 基础环境准备确保满足以下先决条件Python 3.6推荐3.8Android设备/模拟器API Level 21ADB工具已配置且设备可识别验证ADB连接adb devices # 应显示类似输出 # List of devices attached # emulator-5554 device2.2 核心组件安装通过pip安装必要组件pip install --upgrade uiautomator2 pillow weditor设备端初始化需连接设备python -m uiautomator2 init --mirror--mirror参数使用国内镜像加速下载常见问题处理初始化失败检查设备USB调试权限尝试重启ADB服务连接超时确认设备与PC在同一网络或使用USB连接权限问题在设备上手动允许安装未知来源应用2.3 可视化工具配置Weditor提供元素定位的图形化界面weditor --shortcut # 创建桌面快捷方式启动后按提示连接设备实时查看UI层级结构。实际使用中我们推荐结合XPath和resourceId进行元素定位既保证准确性又提高脚本可读性。3. 核心API深度解析3.1 设备连接管理支持USB和WiFi两种连接方式import uiautomator2 as u2 # USB连接推荐调试使用 d u2.connect_usb(emulator-5554) # WiFi连接适合持续集成 d u2.connect_wifi(192.168.1.100)健康检查机制d.healthcheck() # 验证设备服务状态 d.debug True # 开启调试日志3.2 应用生命周期控制完整应用管理示例# 安装应用支持本地路径或URL d.app_install(http://example.com/app.apk) # 启动应用带冷启动参数 d.app_start(com.example.app, stopTrue) # 获取当前应用信息 print(d.current_app()) # 输出示例{package: com.example.app, activity: .MainActivity} # 清理应用数据 d.app_clear(com.example.app)3.3 元素定位与操作六种定位策略对比实践定位方式效率测试结果定位方式平均耗时(ms)稳定性推荐场景resourceId120★★★★★有唯一资源ID的元素text150★★★★☆静态文本元素xpath200★★★☆☆复杂层级结构description180★★★★☆无障碍元素className220★★☆☆☆类型筛选坐标定位50★☆☆☆☆绝对位置操作实战代码示例# 复合定位推荐 d(resourceIdcom.example:id/login, textSign In).click() # XPath高级定位 d.xpath(//*[contains(resource-id, btn_confirm)]).click() # 处理动态元素 elem d(textContainsWelcome) if elem.exists(timeout5): print(elem.get_text())3.4 手势与特殊操作复杂交互实现方案# 九宫格解锁模式 points [(0.3,0.3), (0.5,0.3), (0.7,0.3), (0.3,0.5), (0.5,0.5), (0.7,0.5), (0.3,0.7), (0.5,0.7), (0.7,0.7)] d.swipe_points(points[:5], duration0.2) # 处理悬浮窗 d.disable_popups() # 自动跳过系统弹窗 # Toast消息捕获 toast d.toast.get_message(5.0) assert 登录成功 in toast4. 实战电商应用自动化测试案例4.1 测试场景设计模拟用户完整购物流程应用冷启动用户登录商品搜索与浏览加入购物车结算支付订单验证4.2 关键代码实现def test_shopping_flow(): d u2.connect_usb() d.app_start(com.example.shop, stopTrue) # 处理启动广告 if d(text跳过).exists(timeout3): d(text跳过).click() # 登录操作 d(resourceIdcom.example.shop:id/et_username).set_text(testuser) d(resourceIdcom.example.shop:id/et_password).set_text(Test1234) d(resourceIdcom.example.shop:id/btn_login).click() # 验证登录成功 assert d(text我的账户).wait(timeout5) # 商品搜索 d(resourceIdcom.example.shop:id/iv_search).click() d(resourceIdcom.example.shop:id/et_search).set_text(智能手机) d.press(enter) # 选择第一个商品 d.xpath(//android.support.v7.widget.RecyclerView/android.widget.RelativeLayout[1]).click() # 加入购物车 d(text加入购物车).click() assert d.toast.get_message(3) 添加成功 # 结算操作 d(text去结算).click() d(text立即支付).click() # 验证订单 assert d(text支付成功).wait(timeout10) order_id d(resourceIdcom.example.shop:id/tv_order_id).get_text() print(f订单创建成功编号{order_id})4.3 测试优化技巧等待策略混合使用显式等待和智能等待# 智能等待元素可点击 elem d(text提交订单) elem.wait(timeout10) while not elem.exists: d.swipe(0.5, 0.8, 0.5, 0.5) # 滚动屏幕 time.sleep(1) elem.click()异常处理构建健壮的测试脚本def safe_click(selector, max_retry3): for i in range(max_retry): try: if selector.exists: selector.click() return True except Exception as e: print(f点击失败重试 {i1}/{max_retry}) time.sleep(1) return False性能监控集成资源统计def monitor_performance(): start_time time.time() mem_usage d.app_info(com.example.app)[memory] print(f内存占用{mem_usage}MB) print(f执行耗时{time.time()-start_time:.2f}s)5. 高级应用与持续集成5.1 测试框架集成将UIAutomator2与pytest结合# conftest.py pytest.fixture(scopemodule) def device(): d u2.connect_usb() d.healthcheck() yield d d.app_stop_all() # test_login.py def test_login_success(device): device.app_start(com.example.app) device(resourceIdusername).set_text(admin) device(resourceIdpassword).set_text(123456) device(resourceIdlogin_btn).click() assert device(textWelcome).exists5.2 持续集成实践Jenkins Pipeline示例pipeline { agent any stages { stage(Prepare) { steps { sh python -m pip install -r requirements.txt sh python -m uiautomator2 init --mirror } } stage(Test) { steps { sh pytest tests/ --htmlreport.html } } stage(Report) { steps { publishHTML target: [ allowMissing: false, alwaysLinkToLastBuild: false, keepAll: true, reportDir: ., reportFiles: report.html, reportName: UI Test Report ] } } } }5.3 云测试平台对接主流云测平台兼容方案AWS Device Farm打包测试脚本与依赖Firebase Test Lab通过gcloud命令行提交测试国内云测平台通常支持adb命令直接运行关键配置示例# 打包测试套件 zip -r test_bundle.zip tests/ requirements.txt # Firebase测试命令 gcloud firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test test_bundle.zip \ --device modelPixel4,version306. 效能提升与最佳实践6.1 速度优化方案通过实测对比我们总结了这些优化手段的效果优化措施效能对比优化方法执行时间减少实现难度适用场景禁用动画15-20%★☆☆☆☆所有测试并行测试50-70%★★★☆☆多设备测试智能等待替代固定sleep20-30%★★☆☆☆网络不稳定环境缓存元素定位结果10-15%★★★☆☆重复操作场景减少截图频率5-10%★☆☆☆☆不需要视觉验证具体实现代码# 全局配置优化 d.settings[operation_delay] (0, 1) # 操作间隔随机延迟 d.settings[wait_timeout] 15 # 默认等待超时 # 禁用动画需root d.shell(settings put global window_animation_scale 0) d.shell(settings put global transition_animation_scale 0) d.shell(settings put global animator_duration_scale 0)6.2 稳定性增强处理常见异常场景元素定位失败自动截图重试机制应用崩溃session监控与自动恢复权限弹窗预设处理策略增强版点击方法def robust_click(selector, max_attempts3): attempt 0 while attempt max_attempts: try: if selector.exists: selector.click() return True except Exception as e: print(f点击异常{str(e)}) d.screenshot(ferror_attempt_{attempt}.png) attempt 1 time.sleep(1) raise Exception(f元素点击失败{selector.info})6.3 测试架构设计推荐的分层架构test_project/ ├── core/ # 核心封装 │ ├── device_ctl.py # 设备管理 │ └── page_objects/ # 页面对象模型 ├── libs/ # 自定义库 ├── tests/ # 测试用例 ├── utils/ # 工具类 │ ├── logger.py # 日志配置 │ └── report.py # 报告生成 └── conftest.py # pytest配置页面对象模式示例# page_objects/login_page.py class LoginPage: def __init__(self, device): self.d device property def username_field(self): return self.d(resourceIdcom.example:id/username) property def password_field(self): return self.d(resourceIdcom.example:id/password) def login(self, username, password): self.username_field.set_text(username) self.password_field.set_text(password) self.d(resourceIdcom.example:id/login_btn).click() return HomePage(self.d)7. 常见问题解决方案7.1 元素定位难题案例动态ID的元素定位# 使用XPath部分匹配 d.xpath(//*[contains(resource-id, btn_dynamic_)]).click() # 或使用父子层级定位 d(classNameandroid.widget.LinearLayout).child( classNameandroid.widget.Button ).click()7.2 跨应用测试处理多应用交互场景# 启动设置应用 d.app_start(com.android.settings) # 修改系统设置 d(text显示).click() d(text休眠).click() d(text30秒).click() # 返回测试应用 d.app_start(com.example.app)7.3 特殊输入处理复杂输入场景解决方案# 输入法切换需设备支持 d.set_fastinput_ime(True) # 启用快速输入模式 d(resourceIdinput_field).set_text(中文测试) # 日期选择器操作 d(resourceIddate_picker).click() d(text确定).wait(timeout3) d(text确定).click()7.4 性能测试集成结合内存监控def get_memory_usage(package_name): output d.shell(fdumpsys meminfo {package_name}).output for line in output.splitlines(): if TOTAL in line: return int(line.split()[1]) return 0 # 在关键操作前后记录内存变化 start_mem get_memory_usage(com.example.app) # 执行测试操作... end_mem get_memory_usage(com.example.app) print(f内存增量{end_mem - start_mem}KB)8. 技术演进与生态整合8.1 与Appium的混合使用虽然本文主张替代Appium但在某些场景下混合使用更有优势混合架构优势对比场景纯UIAutomator2方案混合方案纯Android测试★★★★★★★★☆☆多平台(iOSAndroid)不可用★★★★☆云测试平台兼容性★★★☆☆★★★★★执行速度★★★★★★★★☆☆开发效率★★★★☆★★★★★混合使用示例# Appium初始化 from appium import webdriver appium_driver webdriver.Remote( command_executorhttp://localhost:4723/wd/hub, desired_capabilities{ platformName: Android, deviceName: emulator-5554 } ) # UIAutomator2初始化 import uiautomator2 as u2 u2_driver u2.connect_usb(emulator-5554) # 各取所长 appium_driver.find_element_by_accessibility_id(menu).click() # Appium定位 u2_driver(resourceIdcom.example:id/btn).click() # UIAutomator2快速操作8.2 与AI测试结合计算机视觉增强方案# 使用OpenCV进行图像识别 import cv2 def find_image_on_screen(template_path): screen d.screenshot(formatopencv) template cv2.imread(template_path) result cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED) _, max_val, _, max_loc cv2.minMaxLoc(result) if max_val 0.8: # 相似度阈值 center_x max_loc[0] template.shape[1] // 2 center_y max_loc[1] template.shape[0] // 2 return (center_x, center_y) return None # 点击识别到的元素 pos find_image_on_screen(button_template.png) if pos: d.click(*pos)8.3 云原生测试架构Kubernetes测试集群方案apiVersion: apps/v1 kind: Deployment metadata: name: android-test-worker spec: replicas: 5 selector: matchLabels: app: test-worker template: metadata: labels: app: test-worker spec: containers: - name: test-container image: android-test-image:latest env: - name: DEVICE_SERIAL valueFrom: fieldRef: fieldPath: metadata.name command: [python, -m, pytest, tests/] --- apiVersion: v1 kind: Service metadata: name: test-report-service spec: ports: - port: 80 targetPort: 8080 selector: app: test-worker9. 测试报告与质量分析9.1 可视化报告生成集成Allure测试报告# pytest-allure配置 pytest.hookimpl(tryfirstTrue) def pytest_configure(config): config.option.allure_report_dir reports/allure # 测试用例示例 allure.feature(登录模块) class TestLogin: allure.story(成功登录) def test_success_login(self, device): with allure.step(输入用户名密码): device(resourceIdusername).set_text(testuser) device(resourceIdpassword).set_text(pass123) with allure.step(点击登录按钮): device(resourceIdlogin_btn).click() with allure.step(验证登录成功): assert device(text欢迎回来).exists9.2 性能数据分析使用Pandas进行测试数据分析import pandas as pd # 收集测试指标 data { test_case: [login, search, checkout], execution_time: [2.3, 1.7, 3.2], memory_usage: [45, 52, 68], success: [True, True, False] } df pd.DataFrame(data) print(df.describe()) # 生成可视化图表 df.plot(xtest_case, yexecution_time, kindbar)9.3 异常自动诊断智能日志分析脚本def analyze_logs(log_file): error_patterns { ElementNotFound: 定位元素失败, TimeoutException: 等待超时, SessionBroken: 应用崩溃 } with open(log_file) as f: for line in f: for pattern, description in error_patterns.items(): if pattern in line: print(f发现异常{description}) print(f上下文{line.strip()}) suggest_solution(pattern) def suggest_solution(error_type): solutions { ElementNotFound: 尝试使用更稳定的定位策略如resourceId, TimeoutException: 增加等待时间或优化网络环境, SessionBroken: 检查应用稳定性增加重启逻辑 } print(f建议解决方案{solutions.get(error_type, 请查阅文档)})10. 技术资源与进阶学习10.1 官方资源精选UIAutomator2 GitHub 核心仓库含API文档Android Developer文档 官方测试指南Weditor项目 元素定位工具更新10.2 扩展阅读推荐《移动App测试实战》自动化测试设计模式《Python自动化测试实战》UIAutomator2高级技巧Google Testing Blog最新测试理念分享10.3 社区与支持Stack Overflow的uiautomator2标签解决具体技术问题GitHub Issues报告bug和功能请求国内技术论坛CSDN、掘金等平台的测试专栏在实际企业级应用中我们成功将这套方案应用于金融、电商等多个领域的APP测试平均减少60%的测试执行时间同时提高了30%的缺陷发现率。关键在于根据项目特点灵活调整定位策略和等待机制并建立完善的异常处理体系。

相关文章:

告别Appium!用Python+UIAutomator2搞定Android自动化测试(附完整环境搭建与实战代码)

PythonUIAutomator2:Android自动化测试的高效实践指南 在移动应用测试领域,效率与稳定性始终是工程师们追求的核心目标。传统方案如Appium虽然功能全面,但在执行速度和资源消耗方面往往难以满足高频测试需求。本文将带您探索基于Python和UIA…...

终极Windows风扇控制指南:FanControl让你的电脑安静又高效

终极Windows风扇控制指南:FanControl让你的电脑安静又高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…...

告别Selenium?手把手教你用Playwright录制脚本,5分钟搞定Web自动化测试

5分钟极速上手Playwright脚本录制:零代码实现Web自动化测试当产品经理突然丢给你一个刚上线的电商活动页,要求半小时内完成所有核心链路测试时,传统的手写Selenium脚本显然来不及。作为测试工程师,我最近发现微软开源的Playwright…...

终极虚拟显示器解决方案:ParsecVDisplay完整使用指南

终极虚拟显示器解决方案:ParsecVDisplay完整使用指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd ParsecVDisplay是一个基于Parsec虚拟显示驱动(VDD)的独立应用程序…...

如何用Nucleus Co-Op让单机游戏变身本地多人分屏神器

如何用Nucleus Co-Op让单机游戏变身本地多人分屏神器 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为想和朋友一起玩游戏却只有一台电脑而烦…...

基于窗口比较器与晶体管逻辑的可编程非线性电压指示器设计

1. 项目概述:打造一个可编程的“移动光点”电压指示器在电子制作和仪器仪表领域,我们经常需要一个直观的电压指示器。经典的LM3914点/条图显示驱动芯片大家都很熟悉,它能把一个模拟电压信号转换成10个LED的点亮状态,形成移动的光点…...

AI专著生成必备工具,轻松撰写20万字专著,质量与效率双保障!

学术专著的写作是一个严谨的过程,其背后需要大量的资料和数据作为基础。搜集和整理这些资料与数据往往是写作过程中最繁琐且耗时的部分。研究人员需要广泛收集国内外的前沿文献,确保所用文献不仅具备权威性,还要与研究主题密切相关。同时&…...

茉莉花插件:如何让中文文献管理效率提升300%

茉莉花插件:如何让中文文献管理效率提升300% 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为中文文献的元数据抓…...

5步完美解决Windows 10 PL2303驱动兼容性问题:完整实施方案指南

5步完美解决Windows 10 PL2303驱动兼容性问题:完整实施方案指南 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 在Windows 10系统中使用PL2303 USB转串口设…...

3分钟快速上手:bilibili-parse视频解析API终极指南

3分钟快速上手:bilibili-parse视频解析API终极指南 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse bilibili-parse是一款高效专业的B站视频解析工具,为开发者和内容创作者提供…...

全方位梳理 OpenClaw 部署与使用干货

OpenClaw 一键安装包|可视化部署,简化环境配置流程 ✨适配系统:Windows10/11 64 位 当前版本:v2.7.5(虾壳云版) ✨核心优势:全程可视化操作,不用命令行、不用手动配置 Python/Node…...

VideoDownloadHelper终极指南:解锁浏览器视频下载的完整解决方案

VideoDownloadHelper终极指南:解锁浏览器视频下载的完整解决方案 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 还在为无法保存网…...

3步搞定B站缓存视频转换:m4s转MP4的终极解决方案

3步搞定B站缓存视频转换:m4s转MP4的终极解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经在B站缓存了珍贵的视频&a…...

服务器数据下载安全:实时加密与动态访问控制实战

1. 这不是又一个“加个密码”的方案,而是服务器数据流动的实时安检闸机IP-guard安全网关——这个名字在企业IT运维圈里,常被误读为“桌面端U盘管控工具”或“员工上网行为审计系统”。但真正用过它来守服务器的人,会立刻意识到:它…...

智能体任务分配算法:从启发式到深度强化学习的演进与实践

1. 项目概述:从“谁来做”到“如何做得更好”的智能进化在机器人集群、无人机编队或是自动化仓储系统中,我们常常面临一个看似简单实则复杂的问题:眼前有一堆任务,手头有一群可用的智能体(机器人、无人机、服务器等&am…...

从XAI到HXAI:构建以人为中心的可解释AI框架与实践

1. 项目概述:从“黑箱”到“白盒”,构建可信AI的演进之路在机器学习项目里摸爬滚打了十几年,我见过太多因为模型“说不清道不明”而引发的信任危机。一个在测试集上表现完美的信用评分模型,可能因为无法向风控专家解释“为什么拒绝…...

你的差异基因结果可靠吗?用MetaVolcanoR给多个GEO数据集做一次‘交叉验证’吧

你的差异基因结果可靠吗?用MetaVolcanoR给多个GEO数据集做一次"交叉验证"当你在GEO数据库中下载了三个肺癌研究的差异表达结果,却发现三个DEG列表的重叠基因不到20%——这种令人沮丧的场景每天都在全球实验室上演。单项研究的差异分析结果就像…...

MaxEnt建模总失败?别急着换数据,先检查ArcGIS裁剪栅格这1个像素的坑

MaxEnt建模失败?ArcGIS栅格裁剪的1像素陷阱与精准修复指南当你花费数小时整理好WorldClim气候数据、本地DEM高程和物种分布数据,满心期待地点击MaxEnt的运行按钮时,屏幕上突然跳出"Error projecting, two layers have different geograp…...

Mysql?基础语法!!!

作为程序员、数据分析从业者,甚至是产品运营,SQL都是必须掌握的核心技能。不管是后端开发对数据库增删改查,还是数据分析提取业务数据,本质都是在写SQL语句。很多新手觉得SQL难,其实是没有理清逻辑。SQL的核心逻辑非常…...

终极Obsidian笔记模板指南:如何用kepano-obsidian构建你的第二大脑

终极Obsidian笔记模板指南:如何用kepano-obsidian构建你的第二大脑 【免费下载链接】kepano-obsidian My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. 项目地址: https://gitcode.com/gh_…...

从脚本到系统:设计一个支持插件、限流、重试与监控的 Python 异步爬虫框架

从脚本到系统:设计一个支持插件、限流、重试与监控的 Python 异步爬虫框架 很多人第一次写 Python 爬虫,都是从几十行脚本开始的:requests.get()、BeautifulSoup、for 循环、保存 CSV。它很快,也很有成就感。但真实项目往往不是“…...

ComfyUI-WD14-Tagger:AI智能图像标签提取的终极完整指南

ComfyUI-WD14-Tagger:AI智能图像标签提取的终极完整指南 【免费下载链接】ComfyUI-WD14-Tagger A ComfyUI extension allowing for the interrogation of booru tags from images. 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-WD14-Tagger 在AI图像…...

终极音乐解锁指南:3步让加密音乐在任何设备自由播放

终极音乐解锁指南:3步让加密音乐在任何设备自由播放 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:/…...

概率论:常见分布的期望与方差、中心极限定理、切比雪夫不等式

目录 一、0、1分布 二、二项分布 三、泊松分布 四、均匀分布​ 五、指数分布 六、正态分布 七、中心极限定理及其应用 (1)中心极限定理的定义 (2)使用示例 八、切比雪夫不等式 (1)切比雪夫不…...

3步掌握OpenSpeedy:免费开源游戏加速工具使用指南

3步掌握OpenSpeedy:免费开源游戏加速工具使用指南 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否曾为游戏卡顿而烦恼?是否希望在单机游戏中加快…...

基于BLE模块的低功耗无线遥控器设计与实现

1. 项目概述:基于BLE模块的无线遥控器设计与实现几年前,我在捣鼓智能家居时,一直想找一个低功耗、响应快、又能自己完全掌控的无线遥控方案。市面上的成品要么协议封闭,要么功耗感人,要么延迟高得让人着急。后来&#…...

3步快速恢复加密压缩包密码:ArchivePasswordTestTool终极指南

3步快速恢复加密压缩包密码:ArchivePasswordTestTool终极指南 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 面对遗忘的加密压…...

Diablo Edit2:3步掌握暗黑破坏神2存档修改的终极秘籍

Diablo Edit2:3步掌握暗黑破坏神2存档修改的终极秘籍 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神2中刷装备的漫长过程感到疲惫吗?Diablo Edit2这款免费…...

地理空间机器学习库全解析:从TorchGeo到Raster Vision的实战指南

1. 项目概述:为什么我们需要专门的地理空间机器学习库?如果你尝试过用标准的PyTorch或TensorFlow去处理一张卫星影像,大概率会在第一步就卡住。不是模型写不出来,而是数据根本读不进去,或者读进去了却对不上位置。一张…...

为什么你的DeepSeek总漏检重构后代码?4步反混淆预处理法(附LLM辅助去装饰器Python脚本)

更多请点击: https://codechina.net 第一章:DeepSeek代码重复检测 DeepSeek-R1 模型在训练过程中引入了严格的代码去重机制,其核心目标是消除训练语料中语义等价或高度相似的代码片段,从而提升模型对真实编程模式的学习能力与泛化…...