पर एंड्रॉइड जार/डीएक्स विधि गिनती मैंने लिनक्स और मैकोज़ पर विधियों की गिनती के लिए कुछ लिंक देखे हैं, लेकिन मैंने विंडोज के लिए कुछ भी नहीं देखा है। आप .dex या .jar फ़ाइल में कई विधियों की गणना कैसे करते हैं?विंडोज़
विंडोज़
उत्तर
समाधान के लिए असफल खोज के बाद, मैंने दो साधारण बैच/खोल स्क्रिप्ट लिखीं जो ऐसा करती हैं।
पहला, methodcount.bat, अगर फ़ाइल .dex या .jar है, तो जांचता है, और यदि यह एक .jar फ़ाइल है, तो यह इसे डीएक्स फ़ाइल में डीएक्स के साथ संसाधित करता है और फिर दूसरा, printhex.ps1, जो वास्तव में डीएक्स फ़ाइल में विधियों की संख्या की जांच करता है - यह 88 (छोटे एंडियन) से शुरू होने वाले 2 बाइट्स को पढ़ता है और उन्हें दशमलव संख्या में परिवर्तित करता है।
इसका उपयोग करने के लिए आप अपने पथ में कहीं भी डीएक्स रखने के लिए (यह एंड्रॉइड एसडीके बिल्ड-टूल्स/xx.x.x फ़ोल्डर में है) और PowerShell इंस्टॉल है (यह पहले से ही विंडोज 7/8 पर स्थापित होना चाहिए)।
प्रयोग बहुत सरल है: methodcount.bat filename.dex | filename.jar।
यहां स्क्रिप्ट हैं, लेकिन आप उन्हें भी उपलब्ध कर सकते हैं: https://gist.github.com/mrsasha/9f24e129ced1b1db791b।
methodcount.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
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()
मैं देख रहा हूँ इस सवाल पुराना है, लेकिन वहाँ एक Gradle प्लगइन है कि Windows पर काम करेंगे कि कौन सी विधि रिपोर्ट करेंगे है प्रत्येक निर्माण पर एक एपीके में संदर्भ गणना: https://github.com/KeepSafe/dexcount-gradle-plugin।
यह ग्रैडल प्लगइन उपयोग करना आसान है, और एपीके में कुल विधि गणना की रिपोर्ट करता है। अफसोस की बात यह है कि वह उस एपीके में गए जेएआर फाइलों की गणना की रिपोर्ट नहीं करता है। तो यह ओपी के डेक्स आधे का प्रभावी ढंग से जवाब देता है, लेकिन जार आधा नहीं। –
यह सच है, लेकिन बिंदु के बगल में। एक जार की विधि गणना के बारे में बात करना व्यर्थ है - कई जारों को डीएक्स में इनपुट के रूप में, विधि संदर्भ विलय कर दिए जाते हैं और कभी-कभी डिस्क्सिंग के दौरान हटा दिए जाते हैं, और इसलिए क्लासफाइल और डेक्स विधि संदर्भों के बीच कोई भी एक मैपिंग नहीं है। – Ben
पुन: 'जार में विधि गिनती के बारे में बात करने के लिए अर्थहीन' एक महत्वपूर्ण बिंदु। मैंने उल्लेख किया कि इस समाधान ने केवल JAR फ़ाइलों को संबोधित नहीं किया क्योंकि ओपी ने जेएआर फाइलों के बारे में पूछा था। –
- 1. विंडोज़
- 2. विंडोज़
- 3. विंडोज़
- 4. विंडोज़
- 5. विंडोज़
- 6. विंडोज़
- 7. विंडोज़
- 8. विंडोज़
- 9. विंडोज़
- 10. विंडोज़
- 11. विंडोज़
- 12. विंडोज़
- 13. विंडोज़
- 14. विंडोज़
- 15. विंडोज़
- 16. विंडोज़
- 17. विंडोज़
- 18. विंडोज़
- 19. विंडोज़
- 20. विंडोज़
- 21. विंडोज़
- 22. विंडोज़
- 23. विंडोज़
- 24. विंडोज़
- 25. विंडोज़
- 26. विंडोज़
- 27. विंडोज़
- 28. विंडोज़
- 29. विंडोज़
- 30. विंडोज़
इतना अच्छा है, बहुत बहुत धन्यवाद, इस तरह से मैं अपनी एंड्रॉइड ऐप विधि – Devon
देख सकता हूं कई बैर में बैच विधि गिनती के लिए मैं 'printhex.ps1' को' -noexit' विकल्प 'के बिना कॉल करने की सलाह दूंगा इस तरह एक बैच चक्र: '@echo "स्टार्ट"> mc_res.txt \ n @for/f "टोकन = *" %% टी (mc.txt) में (\ n \t कॉल methodcount.bat %% t >> mc_res.txt \ n ) \ n @ rem mc.txt में जार फ़ाइल नामों की एक सूची है। '\ n' का अर्थ है एक नई लाइन ' – IPSUS