【问题标题】:Could not find method dexOptions() for argument找不到参数的方法 dexOptions()
【发布时间】:2017-01-13 06:41:48
【问题描述】:

我正在生成一个用于测试的应用程序,但最后它显示错误 java.lang.OutOfMemoryError: GC 开销限制超出错误。
为了解决这个问题,我遵循了link 上的解决方案。
我已经在模块 build.gradle 文件中添加了这行代码

dexOptions{
    incremental true
    javaMaxHeapSize "2g"
}

但是现在它抛出了另一个错误,上面写着

Gradle sync failed: Could not find method dexOptions() for arguments [build_abwf3h5ru8za0j4597zvncj35$_run_closure2@30ed1096] on project ':app' of type org.gradle.api.Project.
        Consult IDE log for more details (Help | Show Log)


你能帮我解决这个问题吗?
谢谢。

【问题讨论】:

    标签: java android


    【解决方案1】:

    如果您的 minSdkVersion 设置为 21 或更高,您只需在模块级 build.gradle 文件中将 multiDexEnabled 设置为 true,如下所示:

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

    但是,如果您的 minSdkVersion 设置为 20 或更低,那么您必须使用 multidex 支持库,如下所示:

    修改模块级 build.gradle 文件以启用 multidex 并将 multidex 库添加为依赖项,如下所示:

    android {
        defaultConfig {
            ...
            minSdkVersion 15 
            targetSdkVersion 25
            multiDexEnabled true
        }
        ...
    }
    
    dependencies {
      compile 'com.android.support:multidex:1.0.1'
    }
    

    根据您是否覆盖 Application 类,执行以下操作之一: 如果您不覆盖 Application 类,请编辑清单文件以在标记中设置 android:name,如下所示:

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

    如果您确实覆盖了 Application 类,请将其更改为扩展 MultiDexApplication(如果可能),如下所示: 公共类 MyApplication 扩展 MultiDexApplication { ... } 或者,如果您确实覆盖了 Application 类但无法更改基类,那么您可以覆盖 attachBaseContext() 方法并调用 MultiDex.install(this) 以启用 multidex:

    public class MyApplication extends SomeOtherApplication {
      @Override
      protected void attachBaseContext(Context base) {
         super.attachBaseContext(context);
         Multidex.install(this);
      }
    }
    

    【讨论】:

    • 当我在清单中添加 android:name="android.support.multidex.MultiDexApplication" 行时,它会在下一个活动行中引发错误。我有一个 AppController 文件,我想在启动应用程序时执行该文件。那么如果我替换 android:name 可以吗?
    • 创建一个类似“MyApplication”的类并扩展应用程序类并添加“@Override protected void attachBaseContext(Context base) { super.attachBaseContext(context); Multidex.install(this); }” 和 ...
    • minSdkVersion 为 15
    猜你喜欢
    • 2017-01-23
    • 2017-03-22
    • 2018-05-24
    • 2021-11-08
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2017-10-18
    相关资源
    最近更新 更多