2015-01-04 2 views
13

그것은 내가 덱스 오류가있는 몇 가지 새로운 것들을 작성하면의 덱스 한도와 유혹하는 것 같아요, 내가 몇 가지 오래된 것들을 제거하면 사라 졌어요.당신은 안드로이드 스튜디오에 얼마나 많은 방법을 확인하십시오

Android Studio에서 현재 사용하고있는 메소드의 수를 확인할 수있는 방법이 있습니까?

+0

프로젝트에 사용 된 각 종속성의 메소드 수를 Android Studio 플러그인에서 확인할 수 있습니다. 응답을 확인하십시오. http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies/36056607#36056607 – darwin

+0

잘 종속성이 포함하는 메서드의 수를 계산하는 방법은 무엇입니까? – CoDe

답변

7

나는 깨지기 쉬운 방법을 찾을 수 있습니다.

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_VERSIONANDROID_HOME를 대체 모듈의 build.gradle 파일의 맨 아래에 다음을 붙여

이것은 dex 코드 자체를로드하여 dex 파일을 평가하고 메소드의 수를 센다. 빌드 스크립트에서 assemble 작업의 끝 부분에 작업을 추가하므로 명령 줄 빌드에서 또는 실제로 Android Studio (Gradle 콘솔에 표시됨)에서 실행하면 빌드 스크립트에 표시됩니다.

경로를 하드 코드해야하지만 대신 ANDROID_HOME 환경 변수를 사용하려고했지만 Android Studio에서 빌드 할 때 환경 변수를 사용하는 것이 문제가됩니다 (이는 명령 행에서 작동합니다). 마찬가지로 빌드 스크립트에서 다른 곳에서 빌드 도구 버전을 가져 와서 참조하려고했는데 전역 상수 정의를 시도했지만 실행 범위 지정 및 순서를 지정할 수 없었습니다. 누군가가이 문제를 개선 할 수 있다면 의견을 말하고 수정하십시오.

이것은 Carlos Sobrinho가 작성한 것으로부터 변형되었습니다. 원본에 대한 웹 참조를 찾을 수 없습니다. 이 https://github.com/mihaip/dex-method-counts

그것은 당신이 같은 간단한 데이터가 표시됩니다 : 방법을 계산하고 다른 패키지 방법의 양을 보여줍니다

1) 간단한 도구 :

+0

감사합니다.mqn을 사용하여 dx.jar 파일을 로컬로 설치해야 buildscript 클래스 경로가이를 인식 할 수 있습니다. 또한 참고로 도서관에서 필요하면 android.applicationVariants를 android.testVariants로 변경하여 테스트 apx의 dex에서 실행할 수 있도록하십시오. – JCricket

+0

나는 이것을 사용하려고하는데 'com.android.dex.Des 클래스를 해결할 수 없다'는 말을 ... 누군가 나를 도우거나 안내 해줄 수 있습니까? 미리 감사드립니다. –

+3

https://plus.google.com/+JahirFiquitivaJDev/posts/8VXJzyLUiYs Jahir 주제를 찾았습니다. – Phuong

5

나는 방법의 수를 찾기 위해 두 개의 서로 다른 도구를 사용 :

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 
0

https://developer.android.com/studio/build/apk-analyzer.html#view_dex_files APK 분석기의 DEX 파일 뷰어 당신의 DEX 파일 (들)의 기본 정보에 즉시 액세스 할 수 있습니다

당신의 앱. 뷰어 내에 클래스, 패키지, 전체 참조 및 선언 카운트가 제공되어 다중 DEX를 사용할 것인지 또는 종속성을 제거하여 64k DEX 제한을 초과하는 방법을 결정할 수 있습니다.

그림 4는 64KB DEX 한계에 근접한 중간 크기 앱을 보여줍니다.

관련 문제