一种获取功耗信息的方法及装置与流程

文档序号:12123504阅读:465来源:国知局
一种获取功耗信息的方法及装置与流程

本发明涉及通信技术领域,尤其涉及一种获取功耗信息的方法及装置。



背景技术:

目前,获取智能手机功耗信息的方法为:测试人员将存在功耗问题的智能手机与个人计算机通过通用串行总线(Universal Serial Bus,USB)连接,利用Android调试桥(Android Debug Bridge,ADB)命令获取该智能手机的日志(LOG)信息,从该LOG信息中解析出与该智能手机功耗相关的信息。

但是,上述方法在一些情况下无法获得智能手机的功耗信息,例如,智能手机死机或异常关机导致智能手机的LOG信息丢失。并且,只有对功耗检测有丰富经验的测试人员才能从该LOG信息中解析出与智能手机功耗相关的信息,对测试人员的要求高。同时,通过ADB命令获取的LOG信息数量大导致测试人员获取智能手机功耗信息所需的时间长。



技术实现要素:

本发明实施例提供一种获取功耗信息的方法及装置,用以解决现有技术中测试人员获取终端功耗信息时,需要将终端与其他设备连接,检测时间长,对测试人员要求高的问题。

本发明实施例提供的具体技术方案如下:

第一方面,本发明实施例提供了一种获取功耗信息的方法,包括:

终端调用用于检测并获取功耗信息的脚本,其中,所述功耗信息用于描述影响终端功耗的因素;

所述终端运行所述脚本获得功耗信息并保存所述功耗信息。

第二方面,本发明实施例提供了一种获取功耗信息的装置,包括:

调用模块,用于调用用于检测并获取功耗信息的脚本,其中,所述功耗信息用于描述影响终端功耗的因素;

获取模块,用于运行所述脚本获得功耗信息并保存所述功耗信息。

基于上述技术方案,本发明实施例中,终端调用用于检测并获取功耗信息的脚本,运行该脚本获得并保存功耗信息,其中,该功耗信息用于描述影响终端功耗的因素,使得测试人员获取终端的功耗信息时,不需要将该终端与其他设备连接,缩短了功耗检测时间,降低了对测试人员的要求。并且,终端运行该脚本获得功耗信息后,将该功耗信息保存在终端中,解决了终端因死机或异常关机等因素导致终端的日志信息丢失,使得无法获取终端的功耗信息的问题。

附图说明

图1为本发明第一实施例中获取功耗信息的方法流程示意图;

图2为本发明具体实施例中手机通过功耗检测应用获取功耗信息的方法流程图;

图3为本发明具体实施例中手机运行用于检测并获取功耗信息的脚本获取功耗信息的方法流程示意图;

图4为本发明第二实施例中获取功耗信息的装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

为了解决现有技术中测试人员获取终端功耗信息时,需要将终端与其他设备连接,检测时间长,对测试人员要求高的问题,本发明实施例提供一种获取终端功耗信息的方法及装置。

下面结合附图对本发明优选的实施方式进行详细说明。

本发明实施例中,终端的上层应用包括该终端操作系统中的应用和用户在该终端中安装的应用。

本发明第一实施例中,如图1所示,获取终端功耗信息的详细方法流程如下:

步骤101:终端调用用于检测并获取功耗信息的脚本,其中,该功耗信息用于描述影响终端功耗的因素。

具体地,终端的功耗信息包括:终端的上层应用加锁信息、终端的唤醒次数大于预设值的上层应用的标识和/或终端的内核加锁信息,其中,该上层应用加锁信息至少包括处于加锁状态的上层应用的标识,该内核加锁信息包括内核加锁函数的名称、内核加锁的时长,该内核加锁信息为该终端的所有内核加锁信息按照内核加锁时长从大到小的顺序排列时,排在预设排名之内的所有内核加锁信息。

实施中,用于检测并获取功耗信息的脚本使用Shell脚本语言编写。

步骤102:终端运行该脚本获得功耗信息并保存该功耗信息。

实施中,终端运行用于检测并获取功耗信息的脚本中的第一指令获取日志信息,以及运行该脚本中的第二指令,根据第二指令所指示的关键字从该日志信息获取该关键字对应的功耗信息。

优选地,终端运行用于检测并获取功耗信息的脚本中的第一指令获取日志信息之后,运行该脚本中的第三指令将该日志信息保存为临时文件,再运行该脚本中的第二指令从该临时文件中,获取该关键字对应的功耗信息。

具体地,终端运行用于检测并获取功耗信息的脚本中用于调用Andorid系统的转储功耗的系统信息的命令(dumpsys power命令)的第一指令,获取包含终端的上层应用加锁信息的日志信息,运行该脚本中的第二指令,根据该第二指令中用于标识处于加锁状态的上层应用的信息的关键字,如“DOZE_WAKE_LOCK”关键字或“PARTIAL_WAKE_LOCK”关键字,获取终端中处于加锁状态的上层应用的标识;

和或,终端运行用于检测并获取功耗信息的脚本中用于调用Andorid系统的转储定时器的系统信息的命令(dumpsys alarm命令)的第一指令,获取包含唤醒终端的上层应用信息的日志信息,运行该脚本中的第二指令,根据该第二指令中用于标识需要唤醒终端的上层应用信息的关键字,如“wakeups:”关键字,获取所有需要唤醒终端的上层应用的信息,并通过用于获取待处理数据中满足预设条件的数据的指令,获取需要唤醒终端的上层应用的信息中唤醒次数大于预设值的上层应用的标识;

和或,终端运行用于检测并获取功耗信息的脚本中用于调用Andorid系统的转储电池的状态信息的命令(dumpsys batterystats命令)的第一指令,获取包含终端的内核加锁信息的日志信息,运行该脚本中的第二指令,根据该第二指令中用于标识终端内核加锁信息的关键字,如“Kernel Wake lock”关键字,获取终端中所有内核加锁信息,并通过用于获取待处理数据中满足预设条件的数据的指令,获取终端的每条内核加锁信息中的内核加锁函数的名称和加锁时长的信息,再运行用于获取待处理数据中从第一行开始的预设行数的数据的指令,获取该信息按照加锁时长从小到大顺序排列后,前N个内核加锁函数的名称和加锁时长,其中,N为不小于1的整数。

优选地,终端获取包含终端的上层应用加锁信息的日志信息之后,还可以通过包含用于标识处于加锁状态的上层应用的个数的关键字的指令,如“Wake Locks:”,获取终端中处于加锁状态的上层应用的个数。

优选地,终端获取所有需要唤醒终端的上层应用的信息之后,还可以通过包含用于标识运行但没有实际唤醒终端的上层应用的信息的关键字的指令,例如“0wakeups:”,将该信息中运行但没有实际唤醒终端的上层应用的信息(即唤醒次数为0的上层应用的信息)删除。

实施中,终端运行用于检测并获取功耗信息的脚本获取并保存功耗信息之后,删除保存该终端日志信息的临时文件。

实施中,终端运行用于检测并获取功耗信息的脚本获取并保存功耗信息后,显示所述功耗信息。

以下通过具体实施例,以手机为例,对本发明实施例提供的获取终端功耗信息的方法进行详细说明。

手机通过功耗检测应用获取该手机的功耗信息的方法流程如图2所示,具体如下所示:

步骤201:手机安装功耗检测应用,并启动该功耗检测应用。其中,该功耗检测应用用于调用用于检测并获取功耗信息的脚本(powertest.sh),运行该脚本获取手机的功耗信息,并显示该功耗信息,该功耗检测应用安装在目录/system/etc下。

具体地,手机的功耗信息包括上层应用加锁信息、唤醒次数大于100的上层应用的标识和内核加锁信息,其中,该上层应用加锁信息包括处于加锁状态的上层应用的标识和或处于加锁状态的上层应用的个数,该内核加锁信息包括所述内核加锁函数的名称、该内核加锁的时长,该内核加锁信息为手机的所有内核加锁信息按照内核加锁时长从大到小的顺序排列后,排在前五名的内核加锁信息。上层应用加锁导和内核加锁致手机的系统不休眠,增加手机的功耗;上层应用唤醒手机时,手机的平均电流增大,若上层应用多次唤醒手机,手机的功耗明显增加。

步骤202:手机通过功耗检测应用判断目录/system/etc下是否存在powertest.sh,如果存在,执行步骤203,否则,执行步骤206.

步骤203:手机通过功耗检测应用运行powertest.sh脚本,获取并保存手机的功耗信息。

具体地,手机通过功耗检测应用将功耗信息中的应用加锁信息、唤醒次数大于100的上层应用的标识和内核加锁信息分别保存在三个不同的文件中,并将该三个文件保存到目录/sdcard/power下。

步骤204:手机通过功耗检测应用判断目录/sdcard/power下是否生成上述三个保存功耗信息的文件,如果是,执行步骤205,否则,继续检测该目录下是否生成三个保存功耗信息的文件。

步骤205:手机在功耗检测应用界面显示获该功耗信息。

手机在功耗检测应用界面显示获该功耗信息后,结束本次功耗检测。

步骤206:手机报错并退出该功耗检测应用。

具体地,手机运行用于检测并获取功耗信息的脚本获取功耗信息的具体方法流程如图3所示,具体如下:

步骤301:手机运行用于检测并获取功耗信息的脚本中用于调用Andorid系统的dumpsys power命令的指令,获取执行该命令返回的信息,并将该信息保存为第一临时文件。

具体地,手机执行dumpsys power命令返回的信息包括以下内容:

(1)手机当前的供电状态,例如电池电量是否低,显示屏是否准备好等,例如,

Power Manager State:

mBatteryLevelLow=false

mLastWakeTime=0(78762ms ago)

mLastSleepTime=0(78762ms ago)

mDisplayReady=true

(2)与手机电量消耗相关的设置,例如显示屏的最大亮度、最小亮度以及默认亮度,自动灭屏时间等,例如,

Settings and Configuration:

mScreenBrightnessSettingMinimum=5

mScreenBrightnessSettingMaximum=255

mScreenBrightnessSettingDefault=69

Sleep timeout:-1ms

Screen off timeout:600000ms

Screen dim duration:7000ms

(3)处于加锁状态导致手机的系统不休眠的上层应用的个数,以及处于加锁状态的具体上层应用的标识,例如,

Wake Locks:size=2

PARTIAL_WAKE_LOCK'Checkin Service'(uid=10014,pid=2523,ws=WorkSource{10014com.google.android.gms})

PARTIAL_WAKE_LOCK'*net_scheduler*'(uid=10014,pid=2230,ws=WorkSource{10089com.google.android.youtube})

Suspend Blockers:size=4

PowerManagerService.WakeLocks:ref count=1

PowerManagerService.Display:ref count=1

PowerManagerService.Broadcasts:ref count=0

PowerManagerService.WirelessChargerDetector:ref count=0

其中,“Wake Locks:size=2”表示手机当前有两个上层应用处于加锁状态;

(4)手机的显示屏是否开启,以及手机中传感器当前的状态等,例如,

Display Power:state=ON

Wireless Charger Detector State:

mGravitySensor={Sensor name="Gravity",vendor="QTI",version=2,type=9,maxRange=156.9064,resolution=0..0095825195,power=1.2387085,minDelay=10000}

步骤302:手机运行该脚本中包含用于标识处于加锁状态的上层应用的信息的关键字的指令,根据该关键字对第一临时文件进行解析,获得上层应用加锁信息,并将该上层应用加锁信息保存为文本文件。

具体地,手机运行该脚本中包含“DOZE_WAKE_LOCK”或“PARTIAL_WAKE_LOCK”关键字的指令,根据该关键字获得第一临时文件中当前处于加锁状态的上层应用的信息,并将当前处于加锁状态的上层应用的标识输出到目录/data/power的power.txt文件中。若power.txt文件为空,则手机中没有处于加锁状态的上层应用。

例如,power.txt文件中保存的当前处于加锁状态的上层应用的标识如下:

PARTIAL_WAKE_LOCK'Checkin Service'(uid=10014,pid=2523,ws=WorkSource{10014com.google.android.gms})

PARTIAL_WAKE_LOCK'*net_scheduler*'(uid=10014,pid=2230,ws=WorkSource{10089com.google.android.youtube})

实施中,手机还能够运行该脚本中包含用于标识处于加锁状态的上层应用个数的关键字的指令,根据该关键字获取第一临时文件中处于加锁状态的上层应用的个数。具体地,手机根据该脚本中包含“Wake Locks:”关键字的指令,获得手机对dumpsys power命令反馈的信息中处于加锁状态的上层应用的个数,并将处于加锁状态的上层应用的个数保存在目录/data/power下的power.txt文件中。例如,power.txt文件中保存的处于加锁状态的上层应用的个数如下:

Wake Locks:size=2

步骤303:手机运行该脚本中用于调用Andorid系统的dumpsys alarm命令的指令,获取执行该命令返回的信息,并将该信息保存为第二临时文件。

具体地,手机执行dumpsys alarm命令返回的信息包括以下内容:

(1)当前实时时钟(Real-Time Clock,RTC)的状态信息,例如,

Current Alarm Manager state:

Pending alarm batches:12

其中,“Pending alarm batches:12”表示12个定时器(ALARM)将被触发。

(2)手机的系统能否进入休眠,例如,

Broadcast ref count:0wakelock

其中,当count值为0时,表示手机系统可以进入休眠状态;

(3)唤醒手机的时间排在前十名的上层应用的信息,例如,

Top Alarms:

+9s89ms running,2wakeups,2alarms:u0a39:com.android.providers.calendar

*walarm*:com.android.providers.calendar.intent.CalendarProvider2

+1s211ms running,0wakeups,1alarms:1000:android

*alarm*:android.content.jobscheduler.JOB_DELAY_EXPIRED

+1s116ms running,2wakeups,2alarms:u0a23:com.android.vending

*walarm*:com.android.vending/com.google.android.finsky.receivers.Flush LogsReceiver

(4)手机中设置ALARM的上层应用的信息,包括该上层应用的标识、唤醒次数、消耗的时间等,例如,

Alarm Stats:

1000:android+1s762ms running,0wakeups:

其中,“0wakeups”表示上层应用(该上层应用的标识为1000:android)只运行但没有实际唤醒手机的系统。

步骤304:手机运行该脚本中包含用于标识需要唤醒手机的上层应用的信息的关键字的指令,根据该关键字对第二临时文件进行解析,获得所有需要唤醒手机的上层应用的信息,并筛选出唤醒次数大于100的上层应用的信息,将唤醒次数大于100的上层应用的标识保存为文本文件。

具体地,手机运行该脚本中包含“wakeups:”关键字的指令,获得第二临时文件中所有需要唤醒手机的系统的上层应用的信息,再运行该脚本中包含“0wakeups:”关键字的指令,从所有需要唤醒系统的上层应用的信息中去掉只运行但没有实际唤醒手机的系统的上层应用的信息,运行该脚本中用于获取待处理数据中满足预设条件的数据的awk指令,将实际唤醒手机的系统的上层应用的信息中唤醒次数大于100的上层应用的信息筛选出来中,并将唤醒次数大于100的上层应用的标识输出到目录/data/power下的alarm.txt文件中。

例如,手机运行该脚本中包含“0wakeups:”关键字的指令,从所有需要唤醒手机的上层应用的信息中去掉只运行但没有实际唤醒系统的上层应用的信息后得到如下结果:

u0a14:com.google.android.gms+52ms running,576wakeups:

u0a23:com.android.vending+1s127ms running,154wakeups:

u0a39:com.android.providers.calendar+9s89ms running,22wakeups:

其中,每条信息中的每项内容用空格分开,每条信息的第一项为上层应用的标识,第四项为该上层应用的唤醒次数。手机再运行该脚本中awk指令将实际唤醒手机的上层应用的信息中唤醒次数大于100的上层应用的信息筛选出来中,并将唤醒次数大于100的上层应用的标识输出到目录/data/power下的alarm.txt文件中,其中,该文件保存的内容为:

u0a14:com.google.android.gms

u0a23:com.android.vending

实施中,手机运行该脚本中包含“wakeups:”关键字的指令,获得所有需要唤醒手机的上层应用的信息后,可直接运行该脚本中awk指令,将实际唤醒手机的系统的上层应用的信息中唤醒次数大于100的上层应用的信息筛选出来,并将唤醒次数大于100的上层应用的标识会输出到目录/data/power下的alarm.txt文件中。

步骤305:手机运行该脚本中用于调用Andorid系统的dumpsys batterystats命令的指令,获取执行该命令返回的信息,并将该信息保存为第三临时文件。

具体地,手机执行dumpsys batterystats命令返回的信息包括以下内容:

(1)与手机电量相关数据的时间序列,例如,

Battery History(2%used,6236used of 256KB,42strings using 3854):

0(9)RESET:TIME:1970-01-01-08-22-55

0(3)064status=discharging health=good plug=none temp=402volt=7888+running

(2)手机中每个进程执行的时长,例如,

Per-PID Stats:

PID 1206wake time:+8s532ms

PID 2194wake time:+21s282ms

(3)手机从上次充电开始计算的统计数据,例如,

Statistics since last charge:

System starts:4,currently on battery:false

Time on battery:4h 37m 52s 556ms(94.3%)realtime,35m 55s 323ms(12.2%)uptime

(4)手机的电量消耗统计,例如,

Estimated power use(mAh):

Capacity:2000,Computed drain:142,actual drain:0

Screen:75.9

(5)所有内核中的唤醒锁(WAKELOCK)信息,其中,该WAKELOCK信息按照加锁的时长从大到小排列,例如,

All kernel wake locks:

Kernel Wake lock PowerManagerService.WakeLocks:20s 646ms(28times)realtime

Kernel Wake lock PowerManagerService.Display:17s 768ms(14times)realtime

Kernel Wake lock[timerfd]:3s 664ms(76times)realtime

Kernel Wake lock PowerManagerService.Broadcasts:1s 872ms(12times)realtime

步骤306:手机运行该脚本中包含用于标识内核加锁信息的关键字的指令,根据该关键字对第三临时文件进行解析,获得所有内核加锁信息,并筛选出所有内核加锁信息按照内核加锁时长从大到小的顺序排列后,排在前五的内核加锁信息,将该内核加锁信息保存为文本文件。

具体地,手机运行该脚本中包含“Kernel Wake lock”关键字的指令,获取手机第三临时文件中的所有内核加锁信息,其中,第三临时文件中该内核加锁信息按照加锁时长从大到小排列,再运行awk指令将获取的每条信息中的内核加锁函数的名称、加锁时长提取出来,最后运行该脚本中用于获取待处理数据中从第一行开始预设行数的数据的head指令,将通过awk指令获取的信息中前五条信息输出到目录/data/power下的battery.txt文件中。

例如,手机运行该脚本中包含“Kernel Wake lock”关键字的指令,获取手机第三临时文件中的所有内核加锁信息如下:

Kernel Wake lock netmgr_wl:1m 12s 396ms(0times)realtime

Kernel Wake lock nfcwakelock:2s 0ms(1times)realtime

Kernel Wake lock usbin_irq_lock:604ms(1times)realtime

Kernel Wake lock msm_otg:299ms(1times)realtime

Kernel Wake lock PowerManagerService.Display:252ms(1times)realtime

Kernel Wake lock PowerManagerService.WakeLocks:211ms(13times)realtime

Kernel Wake lock PowerManagerService.Broadcasts:66ms(2times)realtime

其中,每条信息中的每项内容用空格分开,每条信息的第四项为内核加锁函数的名称,若内核锁的加锁时长不小于1分钟,则第五项为该内核锁的分钟数,第六项为该内核锁的秒钟数,若内核锁的加锁时长小于1分钟,则第五项为该内核锁的秒钟数。

手机运行该脚本中awk指令将上述信息中的内核加锁函数的名称、加锁时长提取出来,并运行该脚本中head指令,将通过awk指令获取的信息中前五条信息输出到目录/data/power下的battery.txt文件中,battery.txt文件保存的的内容如下:

netmgr_wl:1m

nfcwakelock:2s

usbin_irq_lock:604ms

msm_otg:299ms

PowerManagerService.Display:252ms

一般手机的内核只有一个WAKELOCK,手机运行该脚本从执行dumpsys batterystats命令返回的信息中获得的五个内核加锁信息已经完全覆盖内核加锁的信息,实现了对手机执行dumpsys batterystats命令返回的信息的有效解析。

步骤307:手机运行该脚本中用于删除临时文件的指令,删除第一临时文件、第二临时文件和第三临时文件,将保存上层应用加锁信息的文件、唤醒次数大于100的上层应用的标识的文件和内核加锁信息的文件拷贝到功耗检测应用指定的目录中。

基于同一发明构思,本发明第二实施例中提供了一种获取功耗信息的装置,该装置可以部署在终端中,该装置的具体实施可参见方法实施例部分的描述,重复之处不再赘述,如图4所示,该装置主要包括:

调用模块401,用于调用用于检测并获取功耗信息的脚本,其中,所述功耗信息用于描述影响终端功耗的因素;

获取模块402,用于运行所述脚本获得功耗信息并保存所述功耗信息。

可选的实施方式中,所述获取模块402具体用于:运行所述脚本中的第一指令获取日志信息,以及运行所述脚本中的第二指令,根据所述第二指令所指示的关键字从所述日志信息获取所述关键字对应的功耗信息。

可选的实施方式中,所述获取模块402还用于:运行所述脚本中的第一指令获取日志信息之后,运行所述脚本中的第二指令之前,运行所述脚本中的第三指令将所述日志信息保存为临时文件。

可选的实施方式中,所述功耗信息包括:所述终端的上层应用加锁信息、所述终端的唤醒次数大于预设值的上层应用的标识和/或所述终端的内核加锁信息,其中,所述上层应用加锁信息至少包括处于加锁状态的上层应用的标识,所述内核加锁信息包括所述内核加锁函数的名称、所述内核加锁的时长,所述内核加锁信息为所述终端的内核加锁信息按照内核加锁时长从大到小的顺序排列后,前N个内核加锁信息,N为不小于1的整数。

可选的实施方式中,所述装置还包括:显示模块403,用于显示所述功耗信息。

基于上述技术方案,本发明实施例中,终端调用用于检测并获取功耗信息的脚本,运行该脚本获得并保存功耗信息,其中,该功耗信息用于描述影响终端功耗的因素,使得测试人员获取终端功耗信息时,不需要将终端与其他设备连接,缩短了功耗检测时间,降低了对测试人员的要求。并且,终端运行该脚本获得功耗信息后,将该功耗信息保存在终端中,解决了终端因死机或异常关机等因素导致终端的日志信息丢失,使得无法获取终端的功耗信息的问题。

另外,终端运行该脚本中的第一指令获取日志信息之后,运行所述脚本中的第三指令将所述日志信息保存为临时文件,再根据第二指令从该临时文件中获取功耗信息,当该临时文件较大时,能够提高终端获取功耗信息的效率。终端运行该脚本获取功耗信息后,显示该功耗信息,使得用户能够直观地了解终端的功耗信息。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1