Skip to content

Instantly share code, notes, and snippets.

@Rainer-Lang
Forked from mrsasha/methodcount.bat
Last active August 29, 2015 14:26
Show Gist options
  • Select an option

  • Save Rainer-Lang/db438646af0420e183f0 to your computer and use it in GitHub Desktop.

Select an option

Save Rainer-Lang/db438646af0420e183f0 to your computer and use it in GitHub Desktop.

Revisions

  1. @mrsasha mrsasha created this gist Sep 14, 2014.
    35 changes: 35 additions & 0 deletions methodcount.bat
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,35 @@
    @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
    38 changes: 38 additions & 0 deletions printhex.ps1
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,38 @@
    <#
    .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()