그것은 내가 덱스 오류가있는 몇 가지 새로운 것들을 작성하면의 덱스 한도와 유혹하는 것 같아요, 내가 몇 가지 오래된 것들을 제거하면 사라 졌어요.당신은 안드로이드 스튜디오에 얼마나 많은 방법을 확인하십시오
Android Studio에서 현재 사용하고있는 메소드의 수를 확인할 수있는 방법이 있습니까?
그것은 내가 덱스 오류가있는 몇 가지 새로운 것들을 작성하면의 덱스 한도와 유혹하는 것 같아요, 내가 몇 가지 오래된 것들을 제거하면 사라 졌어요.당신은 안드로이드 스튜디오에 얼마나 많은 방법을 확인하십시오
Android Studio에서 현재 사용하고있는 메소드의 수를 확인할 수있는 방법이 있습니까?
나는 깨지기 쉬운 방법을 찾을 수 있습니다.
buildscript {
dependencies {
classpath files("/Users/sbarta/sdk/build-tools/21.0.2/lib/dx.jar")
}
}
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
variant.assemble.doLast {
// Show the dex count after the assemble task is finished
showDexCount(
[filename: output.outputFile],
)
}
}
}
def showDexCount(Map... files) {
def maxReferences = (int) Math.pow(2, 16);
def buffer = 5000 // that's for safety, because you can't burn maxReferences
println "\n\n***********************************************************************************"
println "* DEX COUNTS *"
println "***********************************************************************************"
files.each {
def dex = new com.android.dex.Dex(it.filename)
def count = dex.tableOfContents.methodIds.size
if ((maxReferences - count - buffer) >= 0)
println String.format('* %1$5d (there are still %2$5d references to burn...) *',
count, maxReferences - count - buffer)
else
println String.format('* %1$5d !!!WARNING!!! Too many references, please decrease by %2$4d! *',
count, -(maxReferences - count - buffer))
}
println "***********************************************************************************\n"
}
: 복사 및
android
블록의
buildToolsVersion
사양에 지정된 동일한 버전으로 안드로이드 SDK 설치 경로와
BUILD_TOOLS_VERSION
와
ANDROID_HOME
를 대체 모듈의
build.gradle 파일의 맨 아래에 다음을 붙여
이것은 dex 코드 자체를로드하여 dex 파일을 평가하고 메소드의 수를 센다. 빌드 스크립트에서 assemble
작업의 끝 부분에 작업을 추가하므로 명령 줄 빌드에서 또는 실제로 Android Studio (Gradle 콘솔에 표시됨)에서 실행하면 빌드 스크립트에 표시됩니다.
경로를 하드 코드해야하지만 대신 ANDROID_HOME 환경 변수를 사용하려고했지만 Android Studio에서 빌드 할 때 환경 변수를 사용하는 것이 문제가됩니다 (이는 명령 행에서 작동합니다). 마찬가지로 빌드 스크립트에서 다른 곳에서 빌드 도구 버전을 가져 와서 참조하려고했는데 전역 상수 정의를 시도했지만 실행 범위 지정 및 순서를 지정할 수 없었습니다. 누군가가이 문제를 개선 할 수 있다면 의견을 말하고 수정하십시오.
이것은 Carlos Sobrinho가 작성한 것으로부터 변형되었습니다. 원본에 대한 웹 참조를 찾을 수 없습니다. 이 https://github.com/mihaip/dex-method-counts
그것은 당신이 같은 간단한 데이터가 표시됩니다 : 방법을 계산하고 다른 패키지 방법의 양을 보여줍니다
1) 간단한 도구 :
감사합니다.mqn을 사용하여 dx.jar 파일을 로컬로 설치해야 buildscript 클래스 경로가이를 인식 할 수 있습니다. 또한 참고로 도서관에서 필요하면 android.applicationVariants를 android.testVariants로 변경하여 테스트 apx의 dex에서 실행할 수 있도록하십시오. – JCricket
나는 이것을 사용하려고하는데 'com.android.dex.Des 클래스를 해결할 수 없다'는 말을 ... 누군가 나를 도우거나 안내 해줄 수 있습니까? 미리 감사드립니다. –
https://plus.google.com/+JahirFiquitivaJDev/posts/8VXJzyLUiYs Jahir 주제를 찾았습니다. – Phuong
나는 방법의 수를 찾기 위해 두 개의 서로 다른 도구를 사용 :
Read in 65490 method IDs.
<root>: 65490
: 3
android: 6837
accessibilityservice: 6
bluetooth: 2
content: 248
pm: 22
res: 45
...
com: 53881
adjust: 283
sdk: 283
codebutler: 65
android_websockets: 65
...
Overall method count: 65490
2) 그리고 여기에 사용하기 더 쉽게 또 다른 도구입니다, 당신은 당신의 프로젝트에 종속성을 추가해야하고 그것은 당신에게 각 빌드에 대한 방법을 보여줍니다. 당신은 단순히 당신이 그것을 필요로하지 않는이 종속성 라인을 언급 할 수 https://github.com/KeepSafe/dexcount-gradle-plugin
methods fields package/class name
5037 1103 android.support.v4
29 1 android.support.v4.accessibilityservice
57 16 android.support.v4.animation
https://developer.android.com/studio/build/apk-analyzer.html#view_dex_files APK 분석기의 DEX 파일 뷰어 당신의 DEX 파일 (들)의 기본 정보에 즉시 액세스 할 수 있습니다
당신의 앱. 뷰어 내에 클래스, 패키지, 전체 참조 및 선언 카운트가 제공되어 다중 DEX를 사용할 것인지 또는 종속성을 제거하여 64k DEX 제한을 초과하는 방법을 결정할 수 있습니다.
그림 4는 64KB DEX 한계에 근접한 중간 크기 앱을 보여줍니다.
프로젝트에 사용 된 각 종속성의 메소드 수를 Android Studio 플러그인에서 확인할 수 있습니다. 응답을 확인하십시오. http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies/36056607#36056607 – darwin
잘 종속성이 포함하는 메서드의 수를 계산하는 방법은 무엇입니까? – CoDe