.dex文件中方法引用的数量不能超过64K,multidexenabled不能正常工作,并且对于任务':app:clean'

时间:2017-01-11 09:56:30

标签: android android-studio build.gradle

任何人都可以帮我解决这个问题!昨天它正在运行,但是今天早上我再次运行我的应用程序时,它无法运行。

这是我的 build.gladle ...

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    repositories {
        mavenCentral()
    }
    defaultConfig {
        applicationId "com.brandtechnosolutions.petbaazar"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}



dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:design:25.1.0'
    compile 'com.google.android.gms:play-services:9.8.0'
    compile 'com.google.android.gms:play-services-appindexing:9.8.0'
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'
    compile 'com.android.support:support-v4:25.1.0'
    compile `enter code here`'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
    testCompile 'junit:junit:4.12'
}

我试过用这个......

defaultConfig {
    ...
    minSdkVersion 15
    targetSdkVersion 23
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

这......

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

然后又出现了一个新错误......

在父级或祖先中找不到方法logIn(View)在视图类中定义的android:onClick属性的上下文

这是 MainActivity ...

中的logIn()方法
void logIn(View view) {                        //called when log in button pressed
    Intent intent = new Intent(MainActivity.this, LoginActivity.class);
    startActivity(intent);                 // start web activity
}

即时运行在android studio中无效...显示错误:

任务执行失败':app:clean'。无法删除文件

当我启用即时运行时。请帮忙!

4 个答案:

答案 0 :(得分:0)

问题是你的onClick方法不是public。我认为错误与multiDex无关。将签名更改为:

public void logIn(View view)...

答案 1 :(得分:0)

尝试添加

android{
...
    dexOptions {
        javaMaxHeapSize "4g"
   }
}

答案 2 :(得分:0)

我最近遇到了同样的问题。如果应用程序包含太多方法调用,则必须使其成为Multidex应用程序。但是,我认为你真的不需要这样做。

在你的app.gradle中你有一行compile 'com.google.android.gms:play-services:9.8.0',它基本上采用了WHOLE play服务模块,这个模块非常庞大。我想你的应用程序也需要永久构建。

因此,删除常规播放服务依赖项(但如果需要,请保留compile 'com.google.android.gms:play-services-appindexing:9.8.0')并添加可能需要在依赖项列表结束后添加以下行apply plugin: 'com.google.gms.google-services'

然后你可以删除所有的multidex垃圾:)

答案 3 :(得分:0)

问题解决了,这就是我所做的......

将其添加到build.gradle

 dexOptions {
        javaMaxHeapSize "1g"
    }

和...

multiDexEnabled true

并将onClick方法更改为public ...

void logIn(View view) {                        //called when log in button pressed
    Intent intent = new Intent(MainActivity.this, LoginActivity.class);
    startActivity(intent);                 // start web activity
}

我实际上并不知道其中哪些确实有效,我一起思考!

非常感谢你们的时间和帮助,非常感谢!