def memoryAnalysis(env): from androidanalysis.utils.osUtils import listdir for process in getObservedLists(): DalvikHeapSizeList = [] DalvikHeapAllocList = [] DalvikHeapPssList = [] DalvikHeapXList = [] startMark = False firstTime = 0 dir = os.path.join(env['memmoredata_core'], get_process(process)) for filename in listdir(dir): if filename is None or filename == '': continue with open(os.path.join(dir, filename)) as memData: for line in memData: if line.find('Dalvik Heap') >= 0: firstTime, startMark = DalvikHeapX( startMark, filename, firstTime, DalvikHeapXList) DalvikHeapList = line.split() DalvikHeapPssList.append(int(DalvikHeapList[PssIndex])) DalvikHeapAllocList.append( int(DalvikHeapList[HeapAlloc])) # print DalvikHeapList[HeapFree] DalvikHeapSizeList.append(int( DalvikHeapList[HeapSize])) memoryAnalysisDraw(env, process, dir, DalvikHeapSizeList, DalvikHeapAllocList, DalvikHeapPssList, DalvikHeapXList)
def doMemAnalysis(env): # 根据 进程名称进入 相应的进程目录下面 from androidanalysis.utils.osUtils import listdir from androidanalysis.utils.SplitUtils import split for process in getObservedLists(): dir = os.path.join(env['memmoredata_core'], get_process(process)) for filename in listdir(dir): if filename is None or filename == '': continue with open(os.path.join(dir, filename)) as memData: for line in memData: # 如果包含 "TOTAL" 则 提取出后面的关键字 # 如果 total 后面的 内容 可以 被 int 来转换 则认为是全部 if "total" in line.lower(): values = split(line, " ", "\t") i = 0 for value in values: i += 1 if i == 2: if value.isdigit(): excuteMemData(process, filename, value) # print ",value:" + value pass pass pass pass
def exc_memdata(env): global startMark global startTime startMark = False startTime = 0 adress = env['memlogpath'] from androidanalysis.utils.osUtils import listdir from androidanalysis.constant.Constant import VERIFY_MEM_FILE_SIZE if adress: success_get_all_mem = True for file in listdir(adress): myfile = os.path.join(adress, file) if os.path.getsize(myfile) < VERIFY_MEM_FILE_SIZE: # 表明没有获取到数据,要么能获取到,要么获取不到 # 如果 小于 4k 表明获取不到,采用单独进程 adb shell dumpsys meminfo processName的方式进行 success_get_all_mem = False writeLog( env, "file {0} 's size less than 1k, something error".format( myfile)) break excuteMemdata(myfile) if not success_get_all_mem: # 从各自的进程里面取获取内存数据 doMemAnalysis(env) pass memDraw(env, adress) else: writeLog(env, "路径为空,请检查!")
def flowCounter(env, userid, hour): if userid < 0: return False result = [] from androidanalysis.utils.osUtils import listdir filelist = listdir(env['flow']) if len(filelist) > 1: for filename in filelist: with open(os.path.join(env['flow'], filename)) as mData: mDownloadFlow = 0 mUploadFlow = 0 for linedata in mData: if linedata.find('lo') >= 0: continue if linedata.find(userid) >= 0: linelist = linedata.split() mDownloadFlow += int(linelist[downloadFlow]) mUploadFlow += int(linelist[uploadFlow]) result.append(mDownloadFlow + mUploadFlow) writeLog( env, '{0} 下载流量:{1},上传流量:{2}'.format(filename, mDownloadFlow, mUploadFlow)) B = float(result[1] - result[0]) M = B / 1024 / 1024 writeLog( env, '总共使用{0:.2f}字节,即{1:.2f}兆,平均每小时使用{2:.2f}兆'.format(B, M, M / hour))
def amalgamateFile(env, dir): filename = os.path.join(env['result'], 'amalgamatefile.txt') result = open(filename, 'w') from androidanalysis.utils.osUtils import listdir for file in listdir(dir): with open(os.path.join(dir, file)) as datas: result.writelines(datas) datas.close() result.close() return filename
def pushfiletoandroid(env, orgpath, targpaht, suffix='.pcm'): from androidanalysis.utils.osUtils import listdir for mfile in listdir(orgpath): if mfile.endswith(suffix) >= 0: runAdbCommand(env, ['push', os.path.join(orgpath, mfile), os.path.join(targpaht, mfile.decode('gbk').encode('utf-8'))])