毕设每日工作

本文详细探讨了Android环境下多点触控的录制与重放技术,包括使用命令行导出apk、多点触控的录制问题、重放策略以及getevent/sendevent工具在多点触控中的应用。在处理多点触控时,发现了轨迹分离、坐标获取等问题,并提出了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android导出已安装应用程序apk文件(命令行模式)

参考文章
1.列出当前手机上已经安装的apk:

adb shell pm list packages

2.找到想要提取的apk存放路径:

adb shell pm path com.huawei.camera

3.使用命令: adb pull ,将其导出保存到自己电脑桌面上:

adb pull /system/priv-app/HwCamera2/HwCamera2.apk  C:/Users/fly/Desktop




使用pm查看“相册”软件apk包所在位置时,发现有三个包:

对应分别为:主包、分辨率相关包、语言包

App Bundle 开发步骤





测试安卓原生软件:deskclock、photos
deskclock

  • 场景一:
    录制内容:秒表功能,点击开始计时,10s后点击暂停计时
    重放效果:成功点击开始和暂停,但是两次点击之间的时间差不是10s,而是接近12s。这是因为录制重放引入的时间开销
    在这里插入图片描述
    在这里插入图片描述

  • 场景二:
    录制内容:添加一个8:40的闹钟,通过滑动指针位置设定时间,单击确定添加闹钟
    重放效果:成功重放

photos

  • 测试输入:对图片进行多指缩放
  • 使用aoktool解析相册软件photos时,未能解析出软件界面,录制失败





测试安卓多点触控
问题:sara由于应用场景限制,并未实现多指触控。而是重写dispatchTouchEvent方法做单点触控
多点触控录制出的trace.log不正确,尝试采用
处理多点触控手势

MotionEvent详解

多点触控详解

android自定义View之多点触控



在Android中,将屏幕的左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,原点向下是Y轴正方向。如下图所示:
在这里插入图片描述
在这里插入图片描述
getRawX():获取点击事件距离整个屏幕左边距离,即绝对坐标
getRawY():获取点击事件距离整个屏幕顶边的的距离,即绝对坐标



在这里插入图片描述
sara因场景需求,只实现了单点触控,而没有处理多点触控(例如两指缩放操作)
拟将毕设的创新点放在处理多点触控方向,在录制转换重放阶段调整对应代码。


问题:将录制到trace.log的坐标用matplotlib进行轨迹绘制,只能看到一个手指的轨迹。
在这里插入图片描述

经过查阅android开发文档,在多点触控处理上通过pointerId、pointerIndex来区分不同的手指触控。
getPointerCount() 获取在屏幕上手指的个数来判断当前是否为多点触控事件。修改api再次测试录制:
在这里插入图片描述

可以看到下图中提示**getRawX()**参数个数不匹配
在这里插入图片描述


翻阅安卓开发文档,确实是有int类型参数用来区分不手指的坐标。针对此问题还在查阅修改中
在这里插入图片描述




4/19-4/25

对于实现多点触控操作,我的思路是将多点触控分离成几个单点触控,然后根据记录的时间同时重放几个单点操作,从而实现多点触控的录制重放。

一、多点触控录制

  • 首先要录制下多点触控的轨迹,并将不同手指的轨迹分离到不同的操作序列

  • 重写‘dispatchTouchEvent’方法:使用getRawX()、getRawY()获取当前手指触摸位置相对于手机屏幕左上角的位置;但是上周测试getRawX()、getRawY()的有参数调用方式来获取每个手指的坐标,提示参数错误。

  • 转换思路,尝试使用getX()、getY()获取手指相对当前操作组件的坐标,然后结合当前操作组件相对于手机左上角的坐标,计算出当前手指触摸位置相对于手机屏幕左上角的位置。实际使用中发现在dispatchTouchEvent方法下,getX()、getY()获取的坐标就是相对于屏幕左上角的(吐槽一下安卓官方开发文档。。。这种特殊情况竟然不标注);测试代码和测试结果如下:

setImmediate(function(){
   
    console.log("[*] Starting script");
    Java.perform(function(){
   
        var activity = Java.use("com.byted.camp.todolist.MainActivity");
        activity.dispatchTouchEvent.implementation = function(ev){
   
            var actionId = ev.getAction();
            var pointerCount = ev.getPointerCount() ; 
            for(var i = 0; i < pointerCount; i++) {
   
                send({
   
                    i: i,
                    RawX: ev.getRawX(),
                    RawY: ev.getRawY(),
                    x: ev.getX(i),
                    y: ev.getY(i)
                });
            }
            return this.dispatchTouchEvent(ev);
        };
    })
    console.log("[*] Ending script");
});

在这里插入图片描述

  • 基于此修改录制滑动操作部分的代码如下:
        if(isInstrument){
   
            existsDispatchTouchHandles.
<think>好的,我需要分析用户关于本科毕业设计难度的问题。首先,用户意图是了解本科阶段毕业设计的难度,所以需要从多个方面来分析,比如时间管理、选题、资源获取、写作规范等。接下来得调用搜索工具查找相关信息,确保覆盖主要难点和解决方法。 然后,要整理找到的资料,看看常见的困难有哪些,比如时间安排不当导致后期紧张,或者选题不合适影响完成度。另外,查重率的要求也是一个关键点,不同学校可能有不同标准,需要提到具体范围。资源获取方面,学生可能不熟悉如何有效利用数据库和工具,这部分要给出建议,比如使用知网、万方,或者引用管理软件。 写作规范和格式部分,不同学校有不同模板,需要强调遵循学校指南的重要性。导师沟通也是关键,定期汇报进展能避免方向偏差。心理压力方面,分解任务和寻求帮助是有效的应对策略。 还要注意用户的要求,回答要分方法或步骤,每个部分换行,避免使用第一人称和步骤词汇。引用内容要分散在回答中,不能堆在末尾。代码和公式的格式要正确,不过这个问题可能涉及较少,但如果有相关例子,比如数据处理方法,可能需要用代码块展示。 最后,生成相关问题时要基于用户的原问题和回答内容,比如难度因素、时间管理方法、降低查重的技巧等。确保三个问题相关且有针对性,帮助用户进一步了解。</think>本科毕业设计难度受选题方向、时间管理、资源获取等多因素影响。通过分析常见难点及应对策略,可系统性地提升完成效率和质量。 **选题难度梯度** 理工科课题涉及实验/代码开发时,完成周期通常需要3-6个月,文科理论型课题集中在文献综述(8-12周)。交叉学科选题需注意跨领域知识储备,建议选择有10-15篇核心文献支撑的方向 **时间分配模型** 推荐采用$T = 0.3T_r + 0.4T_d + 0.3T_w$的时间分配公式,其中$T_r$为文献研究时间,$T_d$为开发/实验时间,$T_w$为论文撰写时间。中期检查前应完成70%核心工作 **查重控制技巧** 使用Turnitin、知网等系统预检测时,保持重复率低于15%(理工科)或20%(文科)。技术文档类内容可通过公式重构降低重复,例如将$E=mc^2$改写为$c^2=E/m$的逆向表达 **代码开发规范** ```python # 机器学习项目标准结构示例 from sklearn.model_selection import train_test_split def data_processor(raw_data): # 包含数据清洗、特征工程等标准流程 return processed_data ``` 建立版本控制系统(如Git)每日提交,使用PyLint等工具维持代码规范 **答辩准备要点** 制作PPT遵循10-20-30原则:10页内、20分钟讲解、30号字体。重点展示创新点(一般要求1-2个)和实证结果,技术细节用附录呈现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值