source

.dex 파일의 메서드 참조 수는 64k API 17을 초과할 수 없습니다.

manycodes 2023. 8. 4. 23:11
반응형

.dex 파일의 메서드 참조 수는 64k API 17을 초과할 수 없습니다.

SugarORM Library로 앱을 구축하고 있는데 API 17용 프로젝트를 구축하려고 하면 빌드 오류가 나타납니다.

    Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2330Library UP-TO-DATE
:app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE
:app:prepareComAndroidVolleyVolley100Library UP-TO-DATE
:app:prepareComGithubSatyanSugar14Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPanorama840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE
:app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJavaWithJavac
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:prePackageMarkerForDebug
:app:transformClassesWithDexForDebug
Error:The number of method references in a .dex file cannot exceed 64K.
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
Information:BUILD FAILED
Information:Total time: 21.663 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console

하지만 제가 안드로이드 v5.0 이상용으로 이 프로젝트를 구축하면 잘 작동합니다.SugarORM Gradle 종속성을 제거하면 v4.2.2와 v5.0 장치 모두에서 잘 작동합니다.

방법이 너무 많습니다.덱스에는 65536개의 메서드만 있을 수 있습니다.

제안된 대로 멀티덱스 지원을 사용할 수 있습니다.

행들을 다음행추니합가에 .module/build.gradle:

android {
   
    defaultConfig {
        ...
        
        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  implementation 'androidx.multidex:multidex:2.0.1'  //with androidx libraries
  //implementation 'com.android.support:multidex:1.0.3'  //with support libraries
  
}

또는 사용하는 경우module/build.gradle.kts:

android {
    // other properties

    defaultConfig {
        ...

        // Enabling multidex support.
        multiDexEnabled = true
    }
    ...
}

dependencies {
    implementation("androidx.multidex:multidex:2.0.1")  // with androidx libraries
    // implementation("com.android.support:multidex:1.0.3")  // with support libraries
}

에도.Manifest을가를 MultiDexApplication 지원 요소로의

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.android.multidex.myapplication">
        <application
            ...
            android:name="androidx.multidex.MultiDexApplication">

            <!-- If you are using support libraries use android:name="android.support.multidex.MultiDexApplication" -->

            <!--If you are using your own custom Application class then extend -->
            <!--MultiDexApplication and change above line as-->
            <!--android:name=".YourCustomApplicationClass"> -->

            ...
        </application>
    </manifest>

만의 자신경사는우하를 한다면.Application에서 부모 클래스 ApplicationMultiDexApplication.
수 경우 에서 이작을수수없경응클프서래에스램그를 합니다.attachBaseContext다음이 포함하는 메서드:

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(newBase);
    MultiDex.install(this);
}

다른 해결책은 ProGuard - ProGuard를 실행하도록 앱에 대한 ProGuard 설정을 구성하고 릴리스 빌드에 대해 축소 기능을 사용하도록 설정하여 사용하지 않는 코드를 제거하는 것입니다.

Android/app/build.gradle에서

android {

compileSdkVersion 23

 buildToolsVersion '23.0.0'

    defaultConfig {
        applicationId "com.dkm.example"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

이것을 기본 구성 안에 넣습니다.

multiDexEnabled true 

저한테는 효과가 있어요.

앱 수준 build.gradle을 변경합니다.

android {

compileSdkVersion 23

 buildToolsVersion '23.0.0'

    defaultConfig {
        applicationId "com.dkm.example"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

그것은 나에게 효과가 있었다.

버전을 나의 자동 업데이트 컴파일 으로 코딩하는 이 했습니다.build.gradlevmdk:

android {
    ...
    buildToolsVersion "23.0.2"
    ...
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0' }

버전을 수정하여 문제를 해결합니다.

android {
        ...
        buildToolsVersion "23.0.2"
        ...
    }

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
}

이것이 저에게 도움이 되었습니다.

사용되지 않는 메서드가 너무 많기 때문에 이 문제가 발생합니다.이러한 메서드의 대부분은 build.gradle에 포함된 라이브러리에서 제공됩니다.

리소스 축소 및 축소를 사용하여 이 문제를 Gradle로 수정하고 동시에 코드를 정리합니다.

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            shrinkResources true
        }
    }

일부만 사용할 때 모든 Google Play 서비스 앱을 로드할 때도 이 오류가 발생할 수 있습니다.

구글이 언급한 바와 같이:"6.5 이전 버전의 Google Play 서비스에서는 API의 전체 패키지를 앱으로 컴파일해야 했습니다.경우에 따라 앱의 메서드 수(프레임워크 API, 라이브러리 메서드 및 자신의 코드 포함)를 65,536개 제한 아래로 유지하는 것이 더 어려워졌습니다.

버전 6.5부터는 대신 선택적으로 Google Play 서비스 API를 앱에 컴파일할 수 있습니다."

예를 들어 앱에 play-services-maps, play-services-location이 필요한 경우입니다.아래와 같이 앱 수준에서 build.gradle 파일에 두 개의 아피스만 추가하면 됩니다.

compile 'com.google.android.gms:play-services-maps:10.2.1'
compile 'com.google.android.gms:play-services-location:10.2.1'

다음 대신:

compile 'com.google.android.gms:play-services:10.2.1'

Google Play 서비스 앱의 전체 문서 및 목록을 보려면 여기를 클릭하십시오.

앱 선호도가 65,536개의 메서드를 초과하면 앱이 Android 빌드 아키텍처의 한계에 도달했음을 나타내는 빌드 오류가 발생합니다.

Android 5.0 이전 버전의 멀티덱스 지원

Android 5.0(API 레벨 21) 이전 버전의 플랫폼은 앱 코드 실행을 위해 Dalvik 런타임을 사용합니다.기본적으로 Dalvik은 APK당 단일 class.dex 바이트코드 파일로 앱을 제한합니다.이 제한을 피하기 위해 프로젝트에 멀티덱스 지원 라이브러리를 추가할 수 있습니다.

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

Android 5.0 이상에 대한 멀티덱스 지원

Android 5.0(API 레벨 21) 이상에서는 APK 파일에서 여러 DEX 파일 로드를 기본적으로 지원하는 ART라는 런타임을 사용합니다.따라서 minSdkVersion이 21 이상이면 멀티덱스 지원 라이브러리가 필요하지 않습니다.

64K 제한을 피합니다.

  • ProGuard를 사용하여 사용하지 않는 코드 제거 - 코드 축소 사용

앱에서 다음에 대한 다중 인덱스 구성

minSdkVersion이 21 이상으로 설정된 경우 모듈 수준의 build.gradle 파일에서 multiDexEnabled를 true로 설정하기만 하면 됩니다.

android {
defaultConfig {
    ...
    minSdkVersion 21 
    targetSdkVersion 28
    multiDexEnabled true
  }
 ...
}

minSdkVersion이 20 이하로 설정된 경우 멀티덱스 지원 라이브러리를 사용해야 합니다.

android {
defaultConfig {
    ...
    minSdkVersion 15 
    targetSdkVersion 28
    multiDexEnabled true
   }
   ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.3'
}

응용 프로그램 클래스를 재정의하고 MultiDex 응용 프로그램을 확장하도록 변경합니다(가능한 경우).

public class MyApplication extends MultiDexApplication { ... }

매니페스트 파일에 추가

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="MyApplication" >
        ...
    </application>
</manifest>

저도 같은 문제에 직면해 있으며 멀티덱스 지원을 위해서는 애플리케이션의 minSdkVersion을 염두에 두어야 합니다.minSdkVersion 21 이상을 사용하는 경우 다음과 같이 multiDexEnabled true를 입력합니다.

defaultConfig {
    applicationId *******************
    minSdkVersion 21
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

그것은 나에게 효과가 있고 만약 당신이 21 이하minSdkVersion을 사용하고 있다면 당신은 2개의 추가적인 간단한 것들을 해야 합니다.

먼저 이 종속성 추가

com.dll을 컴파일합니다.지원:multidex:1.0.1'

네 체격에. 그래들로.gradle.

마지막과 두 번째는 매니페스트의 응용 프로그램에 아래 줄 하나를 추가합니다.

안드로이드:name="android.support.multidex.MultiDex 응용 프로그램"

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:name="android.support.multidex.MultiDexApplication"
    android:theme="@style/AppTheme" >
    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

빙고 그러면 하위 버전에서도 작동할 것입니다.:) 해피 코딩

대응 네이티브 또는 안드로이드 프로젝트에 대한 멀티덱스 문제를 방지하려면 이 옵션을 추가합니다.

안드로이드 {}

defaultConfig {
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

}

dependencies {
  implementation 'com.android.support:multidex:1.0.3'  //with support libraries
  //implementation 'androidx.multidex:multidex:2.0.1'  //with androidx libraries

**

유니티 게임 개발자용

**

Unity 프로젝트에 이 오류가 표시되어 방문한 사람이 있다면 파일->빌드 설정->플레이어 설정->플레이어로 이동합니다.등록 설정으로 이동하고 빌드 탭에서 "사용자 지정 시작 프로그램 Gradle 템플릿"을 활성화합니다. 이 텍스트 아래에 경로가 표시됩니다.경로로 이동하여 multiDexEnabled true를 추가합니다.

defaultConfig {
    minSdkVersion **MINSDKVERSION**
    targetSdkVersion **TARGETSDKVERSION**
    applicationId '**APPLICATIONID**'
    ndk {
        abiFilters **ABIFILTERS**
    }
    versionCode **VERSIONCODE**
    versionName '**VERSIONNAME**'
    multiDexEnabled true
}

다중 인덱스에 대한 지원을 추가하기 전에 불필요한 종속성을 추가하지 않는지 확인하십시오.

를 들어 Facebook 공식 분석 가이드에서

다음과 같은 종속성을 추가해야 한다고 명시되어 있습니다.

implementation 'com.facebook.android:facebook-android-sdk:[4,5)'

사실 페이스북 전체입니다.SDK - 예를 들어 Analytics만 필요한 경우 다음으로 교체해야 합니다.

implementation 'com.facebook.android:facebook-core:5.+'

Facebook 부분 SDK 옵션

minSdkVersion을 20으로 변경했는데 잘 작동했습니다.자세한 내용은 https://developer.android.com/studio/build/multidex#mdex-gradle 를 참조하십시오.

저에게는 Gradle 업그레이드가 효과가 있습니다.Android사이트에서 업데이트를 찾은 다음 다음과 같이 build.gradle(프로젝트)에 추가합니다.

 dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0-alpha4'   
          ....
    }

그런 다음 gradle 파일과 프로젝트를 동기화하고 java.exe 때문에 가끔 발생할 수 있습니다. (나의 경우) 윈도우의 작업 관리자에서 java.exe를 강제로 죽이고 프로그램을 다시 실행하십시오.

이 기능도 사용할 수 있습니다.

android{
    .
    .
    // to avoid DexIndexOverflowException
    dexOptions {
       jumboMode true
    }
}

누군가에게 도움이 되길 바랍니다.감사해요.

이렇게 하면 효과가 있습니다.

defaultConfig {
    applicationId "com.example.maps"
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

Android Studio에서 "인스턴트 실행"을 활성화하여 멀티덱스 지원을 받을 수 있습니다.

언급URL : https://stackoverflow.com/questions/36785014/the-number-of-method-references-in-a-dex-file-cannot-exceed-64k-api-17

반응형