Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用新的Android Multidex支持库启用Multidex_Android_Gradle_Android Multidex - Fatal编程技术网

如何使用新的Android Multidex支持库启用Multidex

如何使用新的Android Multidex支持库启用Multidex,android,gradle,android-multidex,Android,Gradle,Android Multidex,我想使用新的Multidex支持库来打破我的一个应用程序的方法限制 借助安卓棒棒糖,谷歌推出了一个多索引支持库,使多索引变得容易 使用此库和使用多索引支持构建我的应用程序需要哪些步骤?启动多索引需要以下步骤: 将android-support-multidex.jar添加到项目中。jar可以在您的Android SDK文件夹/SDK/extras/Android/support/multidex/libs中找到 现在,您可以让应用程序应用程序类扩展多索引应用程序 public class MyA

我想使用新的Multidex支持库来打破我的一个应用程序的方法限制

借助安卓棒棒糖,谷歌推出了一个多索引支持库,使多索引变得容易


使用此库和使用多索引支持构建我的应用程序需要哪些步骤?

启动多索引需要以下步骤:

将android-support-multidex.jar添加到项目中。jar可以在您的Android SDK文件夹/SDK/extras/Android/support/multidex/libs中找到

现在,您可以让应用程序应用程序类扩展多索引应用程序

public class MyApplication extends MultiDexApplication
或者像这样重写attachBaseContext:

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}
我使用了覆盖方法,因为这不会影响应用程序类的类层次结构

现在,您的应用程序已准备好使用multi-dex。下一步是说服gradle构建一个多索引apk。build tools团队正在努力简化这一过程,但目前您需要将以下内容添加到应用程序build.gradle的android部分

   dexOptions {
      preDexLibraries = false
   }
afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}
defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.android.support:multidex:1.0.0'
    }
}
multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'
下面是应用程序build.gradle的常规部分

   dexOptions {
      preDexLibraries = false
   }
afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}
defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.android.support:multidex:1.0.0'
    }
}
multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'
有关更多信息,请访问。

编辑:

Android 5.0(API级别21)及更高版本使用支持多重索引的ART。因此,如果
minSdkVersion
为21或更高版本,则不需要multidex支持库


修改您的
build.gradle

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0"

         defaultConfig {
             minSdkVersion 14 //lower than 14 doesn't support multidex
             targetSdkVersion 22

             // Enabling multidex support.
             multiDexEnabled true
         }
}

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
}
如果您正在运行单元测试,您将希望将其包括在
应用程序
类中:

public class YouApplication extends Application {

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

}
或者让您的
应用程序
类扩展
多索引应用程序

public class Application extends MultiDexApplication {

}

有关更多信息,请参阅此

简单地说,为了启用多索引,您需要

android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

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

dependencies {
implementation 'com.android.support:multidex:1.0.0'
}
您还必须更改清单文件。在清单中,将multidex支持库中的MultiDexApplication类添加到application元素,如下所示

<?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="android.support.multidex.MultiDexApplication">
       ...
   </application>
</manifest>

...

如果您想在项目中启用多索引,只需转到gradle.builder即可

并将此添加到您的dependencie中

 dependencies {
   compile 'com.android.support:multidex:1.0.0'}
那么你必须加上

 defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...

// Enabling multidex support.
multiDexEnabled true}
然后打开一个类并将其扩展到应用程序 如果应用程序使用扩展应用程序类,则可以重写oncrete()方法并调用

   MultiDex.install(this) 
启用多索引

最后添加到您的清单中

 <?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="android.support.multidex.MultiDexApplication">
   ...
   </application>
 </manifest> 

...

在您的build.gradle中添加此依赖项:

compile 'com.android.support:multidex:1.0.1'
再次在build.gradle文件中,将此行添加到defaultConfig块:

multiDexEnabled true
而不是从应用程序扩展应用程序类多索引应用程序扩展它;比如:

public class AppConfig extends MultiDexApplication {
现在你可以走了!如果您需要它,
MultiDexApplication
所做的就是

public class MultiDexApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

步骤1:更改build.grade

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

dependencies {
    ...
    compile 'com.android.support:multidex:1.0.0'
}
步骤2:应用程序类的设置

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
    }
}
第3步:更改grade.properties

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

它会起作用的!。谢谢。

添加到AndroidManifest.xml:

android:name="android.support.multidex.MultiDexApplication" 

在自定义应用程序的attachBaseContext方法中

或者您的自定义应用程序扩展多索引应用程序

public class MyApplication extends MultiDexApplication
在build.gradle中添加multiDexEnabled=true

   dexOptions {
      preDexLibraries = false
   }
afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}
defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.android.support:multidex:1.0.0'
    }
}
multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'

只需在构建中添加此剪接。gradle也可以正常工作

android {
   compileSdkVersion 22
   buildToolsVersion "23.0.0"

     defaultConfig {
         minSdkVersion 14 //lower than 14 doesn't support multidex
         targetSdkVersion 22

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

首先,您应该尝试使用Proguard(这会清除所有未使用的代码)

Multi_Dex.java

public class Multi_Dex extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
格雷德尔先生

   dexOptions {
      preDexLibraries = false
   }
afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}
defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.android.support:multidex:1.0.0'
    }
}
multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'
AndroidManifest.xml

<application
    android:name="androidx.multidex.MultiDexApplication"

这是一个截至2020年10月的最新方法,使用Android X。这来自Android的文档,“

对于
minSdk
>=21 你不需要做任何事情。所有这些设备都使用Android运行时(ART)VM,它本机支持多索引

对于
minSdk
<21 在模块级
build.gradle
中,确保填充了以下配置:

android {
    defaultConfig {
        multiDexEnabled true
    }
}

dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}
您需要安装显式多索引支持。文档包括,您必须选择一个

例如,在
src/main/AndroidManifest.xml
中,可以将
MultiDexApplication
声明为
application:name


以上所有答案都很棒

同时添加这个,否则你的应用程序会像我的一样无缘无故崩溃

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

使用androidx,经典支持库不再工作

简单的解决方案是使用以下代码

build.gradle
文件中

android{
  ...
  ...
  defaultConfig {
     ...
     ...
     multiDexEnabled true
  }
  ...
}

dependencies {
  ...
  ...
  implementation 'androidx.multidex:multidex:2.0.1'
}
在清单中,只需将name属性添加到应用程序标记中

<manifest ...>
    <application
        android:name="androidx.multidex.MultiDexApplication"
     ...
     ...>
         ...
         ...
    </application>
</manifest>

...
...
如果应用程序的目标是API 21或更高版本,则默认情况下启用multidex


现在,如果您想摆脱尝试支持multidex时所面临的许多问题,请首先尝试通过设置
minifyEnabled true

使用代码收缩,如果没有gradle,我如何使用它?@Janusz没有gradle,是否可以使用multidex选项?我认为没有gradle,这是不可能的。Eclipse Ant的修复方法是什么,不是gradle?我的项目不创建gradle文件,我创建了一个并遵循了您的步骤,但是如果您使用新的构建工具,它对我不起作用,但这绝对是正确的做法。@jem88您将gradle更新为1.0??您应该使用2.2.+(查看
gradle wrapper.properties
)关键点:1您的BuildTools版本需要为21.1.1或更高版本。2将
multiDexEnabled true
添加到build.gradle的默认配置中(注意没有
=
)3添加
'com.android.support:multidex:1.0.0'
如果我们不使用应用程序类呢?将
android:name=“android.support.multidex.MultiDexApplication”
添加到
AndroidManifest.xml
中的
application
标记是否足够?在中不需要编译'com.android.support:multidex:1.0.1'23@NaveedAhmad,根据谷歌开发者文档:
。如果你的minsdk版本设置为20或更低,你必须使用…
'compile'com.android。支持:multidex:1.0.1'
.T