1. 程式人生 > >怎麼檢視APK的方法數

怎麼檢視APK的方法數

網上找的一個指令碼,電腦系統為windows 親測 好用。
將下面兩個檔案printhex.ps1、dex-method-count.bat拷貝到一個資料夾下,檔名字和字尾都不要變,然後將需要檢測的classes.dex檔案也放在這個資料夾下

開啟命令列並切到當前目錄下,執行命令

dex-method-count.bat classes.dex

會輸出結果
Counting methods in DEX file classes.dex
Number of methods is 63952

方法數沒有超過65535個就可以啦,不然就要分包了

printhex.ps1

<#
.SYNOPSIS Outputs the number of methods in a dex file. .PARAMETER Path Specifies the path to a file. Wildcards are not permitted. #> param( [parameter(Position=0,Mandatory=$TRUE)] [String] $Path ) if ( -not (test-path -literalpath $Path) ) { write-error "Path '$Path' not found." -category ObjectNotFound exit
} $item = get-item -literalpath $Path -force if ( -not ($? -and ($item -is [System.IO.FileInfo])) ) { write-error "'$Path' is not a file in the file system." -category InvalidType exit } if ( $item.Length -gt [UInt32]::MaxValue ) { write-error "'$Path' is too large." -category OpenError exit
} $stream = [System.IO.File]::OpenRead($item.FullName) $buffer = new-object Byte[] 2 $stream.Position = 88 $bytesread = $stream.Read($buffer, 0, 2) $output = $buffer[0..1] #("{1:X2} {0:X2}") -f $output $outputdec = $buffer[1]*256 + $buffer[0] "Number of methods is " + $outputdec $stream.Close()

dex-method-count.bat

@ECHO OFF

IF "%1"=="" GOTO MissingFileNameError

IF EXIST "%1" (GOTO ContinueProcessing) ELSE (GOTO FileDoesntExist)



:ContinueProcessing

set FileNameToProcess=%1

set FileNameForDx=%~n1.dex

IF "%~x1"==".dex" GOTO ProcessWithPowerShell



REM preprocess Jar with dx

IF "%~x1"==".jar" (

    ECHO Processing Jar %FileNameToProcess% with DX!

    CALL dx --dex --output=%FileNameForDx% %FileNameToProcess%

    set FileNameToProcess=%FileNameForDx%

    IF ERRORLEVEL 1 GOTO DxProcessingError

)



:ProcessWithPowerShell

ECHO Counting methods in DEX file %FileNameToProcess%

CALL powershell -noexit -executionpolicy bypass "& ".\printhex.ps1" %FileNameToProcess%

GOTO End



:MissingFileNameError

@ECHO Missing filename for processing

GOTO End



:DxProcessingError

@ECHO Error processing file %1% with dx!

GOTO End



:FileDoesntExist

@ECHO File %1% doesn't exist!

GOTO End



:End