如何使用新的Android Multidex支持库启用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
使用此库和使用多索引支持构建我的应用程序需要哪些步骤?启动多索引需要以下步骤: 将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