【问题标题】:Enabling MultiDex causes Gradle sync to fail启用 MultiDex 会导致 Gradle 同步失败
【发布时间】:2018-07-29 02:44:29
【问题描述】:

我关注了 android 开发者网站 instructions 以启用 MultiDex。但是当我添加这些行时,gradle sync 失败。这是我的build.gradle 文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.vvaezian.multilingovocabularypractice"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true    // <----- added ------
    }
    buildTypes {
        debug {
            buildConfigField 'String', "ApiKey", MultiLingo_ApiKey
        }
        release {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField 'String', "ApiKey", MultiLingo_ApiKey
        }
    }

    packagingOptions {
        exclude 'project.properties'
        exclude 'META-INF/INDEX.LIST'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2')

    implementation 'com.android.support:appcompat-v7:26.+'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.mcxiaoke.volley:library:1.0.19'
    testImplementation 'junit:junit:4.12'

    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    implementation 'com.squareup.okhttp3:okhttp:3.8.0'

    implementation('com.google.cloud:google-cloud-translate:1.3.1') {
        exclude group: 'org.apache.httpcomponents'
        exclude group: 'org.json', module: 'json'
    }
    annotationProcessor 'com.google.cloud:google-cloud-translate:1.3.1'

    implementation 'com.android.support:multidex:1.0.3'  // <----- added ----
}

当我将android:name="android.support.multidex.MultiDexApplication 添加到 manifest.xml 时,它显示unresolved class 'MultiDexApplication',我猜这是因为 gradle 同步失败。

在日志中找不到gradle sync失败的原因:

2018-07-28 19:25:09,721 [e-1024-b01]   INFO - e.project.sync.GradleSyncState - Started sync with Gradle for project 'MultiLingoVocabularyPractice'. 
2018-07-28 19:25:09,723 [e-1024-b01]   INFO - idea.project.IndexingSuspender - Consuming IndexingSuspender activation event: SYNC_STARTED 
2018-07-28 19:25:09,723 [e-1024-b01]   INFO - idea.project.IndexingSuspender - Starting batch update for project: Project '/local-scratch/vvaezian/AndroidStudioProjects/MultiLingoVocabularyPractice' MultiLingoVocabularyPractice 
2018-07-28 19:25:09,732 [ thread 26]   INFO - s.plugins.gradle.GradleManager - Instructing gradle to use java from /local-scratch/vvaezian/android-studio/jre 
2018-07-28 19:25:09,734 [ thread 26]   INFO - s.plugins.gradle.GradleManager - Instructing gradle to use java from /local-scratch/vvaezian/android-studio/jre 
2018-07-28 19:25:09,746 [ thread 26]   INFO - xecution.GradleExecutionHelper - Passing command-line args to Gradle Tooling API: -Didea.version=3.1 -Djava.awt.headless=true -Pandroid.injected.build.model.only=true -Pandroid.injected.build.model.only.advanced=true -Pandroid.injected.invoked.from.ide=true -Pandroid.injected.build.model.only.versioned=3 -Pandroid.injected.studio.version=3.1.3.0 -Pandroid.builder.sdkDownload=false --init-script /tmp/ijinit.gradle 
2018-07-28 19:25:12,471 [ thread 26]   INFO - e.project.sync.GradleSyncState - Started setup of project 'MultiLingoVocabularyPractice'. 
2018-07-28 19:25:12,472 [e-1024-b01]   INFO - idea.project.IndexingSuspender - Consuming IndexingSuspender activation event: SETUP_STARTED 
2018-07-28 19:25:12,494 [ thread 36]   INFO - idea.project.IndexingSuspender - Indexing suspended (context: Project Setup) 
2018-07-28 19:25:12,907 [e-1024-b01]   INFO - ule.android.SdkModuleSetupStep - Set Android SDK 'Android API 26 Platform (1)' (/local-scratch/vvaezian/SDK) to module 'app' 
2018-07-28 19:25:12,925 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/build-tools/26.0.1/package.xml 
2018-07-28 19:25:12,933 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/build-tools/27.0.3/package.xml 
2018-07-28 19:25:12,941 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/emulator/package.xml 
2018-07-28 19:25:12,947 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/extras/android/m2repository/package.xml 
2018-07-28 19:25:12,954 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/extras/google/m2repository/package.xml 
2018-07-28 19:25:12,960 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.2/package.xml 
2018-07-28 19:25:12,967 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/extras/m2repository/com/android/support/constraint/constraint-layout/1.0.2/package.xml 
2018-07-28 19:25:12,974 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/patcher/v4/package.xml 
2018-07-28 19:25:12,980 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/platform-tools/package.xml 
2018-07-28 19:25:12,989 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/platforms/android-23/package.xml 
2018-07-28 19:25:12,995 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/platforms/android-24/package.xml 
2018-07-28 19:25:13,001 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/platforms/android-25/package.xml 
2018-07-28 19:25:13,007 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/platforms/android-26/package.xml 
2018-07-28 19:25:13,012 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/sources/android-26/package.xml 
2018-07-28 19:25:13,017 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/system-images/android-24/google_apis_playstore/x86/package.xml 
2018-07-28 19:25:13,022 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/system-images/android-26/google_apis/x86/package.xml 
2018-07-28 19:25:13,033 [ thread 37]   INFO - s.RepoProgressIndicatorAdapter - Parsing /local-scratch/vvaezian/SDK/tools/package.xml 
2018-07-28 19:25:13,157 [ thread 35]   INFO - e.project.sync.GradleSyncState - Gradle sync failed (3s 435ms) 
2018-07-28 19:25:13,167 [e-1024-b01]   INFO - idea.project.IndexingSuspender - Consuming IndexingSuspender deactivation event: SYNC_FINISHED 
2018-07-28 19:25:13,167 [e-1024-b01]   INFO - idea.project.IndexingSuspender - Finishing batch update for project: Project '/local-scratch/vvaezian/AndroidStudioProjects/MultiLingoVocabularyPractice' MultiLingoVocabularyPractice 
2018-07-28 19:25:13,173 [e-1024-b01]   INFO - pl.ProjectRootManagerComponent - project roots have changed 
2018-07-28 19:25:13,242 [ thread 36]   INFO - idea.project.IndexingSuspender - Indexing released (context: Project Setup) 
2018-07-28 19:25:13,246 [e-1024-b01]   INFO - pl.ProjectRootManagerComponent - project roots have changed 
2018-07-28 19:25:13,371 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Clearing symbols finished in 0 s. 
2018-07-28 19:25:13,371 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Building symbols in FAST mode, 0 source files from total 0 project files 
2018-07-28 19:25:13,413 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Loading Module Maps finished in 0 s. 
2018-07-28 19:25:13,416 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Saving Module Maps finished in 0 s. 
2018-07-28 19:25:13,416 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Saving Module Maps finished in 0 s. 
2018-07-28 19:25:13,416 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Loaded 0 tables for 0 files (0 project files) 
2018-07-28 19:25:13,418 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Building symbols for 0 source files 
2018-07-28 19:25:13,422 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Building symbols for 0 unused headers 
2018-07-28 19:25:13,434 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Building symbols finished in 0 s. 
2018-07-28 19:25:13,434 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Saving modified symbols for 0 files (0 tables of total 0) 
2018-07-28 19:25:13,435 [ thread 36]   INFO -       #com.jetbrains.cidr.lang - Saving symbols finished in 0 s. 
2018-07-28 19:25:13,505 [ thread 36]   INFO - .diagnostic.PerformanceWatcher - Pushing properties took 6ms; general responsiveness: ok; EDT responsiveness: ok 
2018-07-28 19:25:13,521 [ thread 36]   INFO - .diagnostic.PerformanceWatcher - Indexable file iteration took 15ms; general responsiveness: ok; EDT responsiveness: ok 
2018-07-28 19:25:13,521 [ thread 36]   INFO - indexing.UnindexedFilesUpdater - Unindexed files update started: 2 files to update 
2018-07-28 19:25:13,571 [ thread 36]   INFO - .diagnostic.PerformanceWatcher - Unindexed files update took 50ms; general responsiveness: ok; EDT responsiveness: ok 

任何帮助将不胜感激。

【问题讨论】:

  • 您不需要将 android.support.multidex.MultidexApplication 添加到清单文件中。如果您有任何扩展应用程序的类,则只需将扩展应用程序替换为扩展 MultidexApplication。
  • 你重写了Application类吗?
  • @masoudvali 在说明中说,如果您没有覆盖 Application 类,则将该行添加到清单中,否则执行其他操作。我不确定是否要覆盖 Application 类。那是什么意思? (顺便说一句,我尝试在不将该行添加到清单的情况下进行同步,但它也不起作用)
  • 所以我认为这不是多索引问题。尝试将特定版本设置为此行implementation 'com.android.support:appcompat-v7:26.+'
  • @masoudvali 很有趣。当我用它建议的 (1.0) 替换 + 时,即使我没有启用 MultiDex,gradle 同步也会失败。

标签: android android-gradle-plugin android-multidex


【解决方案1】:

看来你的 gradle 文件没问题。您必须在 Application 类中包含 Multidex:

public class YourApplicationClass extends Application {

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

}

AndroidManifest.xml 文件中

 <application
    android:name=".YourApplicationClass"
    android:allowBackup="true"
    android:debuggable="true"
    android:icon="@drawable/ic_launcher"
    android:label="xyz"
    android:theme="@style/AppTheme">

【讨论】:

  • 请提供更多细节。 YourApplicationClass 是我的主要活动吗?或者我需要用这段代码创建一个新的 java 类?
  • 这是一个新的 Java 类,不是你的活动。
  • Gradle 同步仍然失败。在MultiDex.install(this); Multidex 是红色的:cannot resolve symbol MultiDex
猜你喜欢
  • 1970-01-01
  • 2018-09-19
  • 2019-04-07
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2014-07-16
相关资源
最近更新 更多