我想使用新的 Multidex 支持库来打破我的一个应用程序的方法限制。
随着 Android Lollipop 的推出,谷歌引入了一个 multidex 支持库,使得 multidex 变得更加容易。
使用这个库和构建支持 multidex 的应用程序需要哪些步骤?
需要采取以下步骤来开始多指标检索:
将 Android-support-multidex. jar 添加到您的项目中,该 jar 可以在您的 Android SDK 文件夹/SDK/texas/Android/support/multidex/library/libs 中找到
现在,要么让应用程序类扩展 MultiDexApplication
public class MyApplication extends MultiDexApplication
或者像下面这样覆盖 attachBaseContext:
protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
我使用了重写方法,因为它不会干扰应用程序类的类层次结构。
现在您的应用程序已经准备好使用 multi dex。下一步是说服 gradle 建立一个多指标的 apk。构建工具团队正在努力使之变得更加容易,但是现在您需要将以下内容添加到您的应用程序 build.gradle 的 android 部分
dexOptions { preDexLibraries = false }
下面是应用程序的常规部分 build.gradle
afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = ['--multi-dex'] } else { dx.additionalParameters += '--multi-dex' } } }
更多信息可以在 Alex Lipovs 博客上找到。
编辑:
Android 5.0(API 级别21)及更高版本使用支持多重索引的 ART。因此,如果 minSdkVersion为21或更高,则不需要 multidex 支持库。
minSdkVersion
修改你的 build.gradle:
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' }
如果您正在运行单元测试,那么您需要在 Application类中包含以下内容:
Application
public class YouApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
或者只是让你的 application类扩展 MultiDexApplication
application
MultiDexApplication
public class Application extends MultiDexApplication { }
更多信息,这个 是个好向导。
简单来说,为了启用 multidex,你需要..。
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>
如果您想在您的项目中启用 multi-dex,那么只需转到 gradle.builder
并将其添加到依赖项中
dependencies { compile 'com.android.support:multidex:1.0.0'}
那你就得加上
defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true}
然后打开一个类并将其扩展到 Application 如果您的应用程序使用扩展 Application 类,您可以重写 oncrete()方法并调用
MultiDex.install(this)
启动多重指数。
最后加入你们的清单
在 建造,分级中添加这个依赖项:
compile 'com.android.support:multidex:1.0.1'
再次在 建造,分级文件中将这一行添加到 默认配置块:
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: 设置 Application 类
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); MultiDex.install(this); } }
第三步: 更改 grade.properties
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
会成功的,谢谢。
添加到 AndroidManifest.xml:
android:name="android.support.multidex.MultiDexApplication"
或者
MultiDex.install(this);
在自定义 Application 的 attachBaseContext 方法中
或者您的自定义应用程序扩展 MultiDexApplication
在 build.gradle 中添加 multiDexEnable = true
defaultConfig { multiDexEnabled true } dependencies { compile 'com.android.support:multidex:1.0.0' } }
在 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**** } }
首先,您应该尝试使用 ProGuard (这会清除所有未使用的代码)
android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
Multi _ Dex. java
public class Multi_Dex extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
建造,分级
multiDexEnabled true implementation 'androidx.multidex:multidex:2.0.1'
AndroidManifest.xml
<application android:name="androidx.multidex.MultiDexApplication"
这里是一个截至2020年10月的 Android X 最新方法,它来自于 Android 的文档“ 为具有超过64K 方法的应用程序启用 multidex”
minSdk
你什么都不用做。所有这些设备都使用 Android RunTime (ART) VM,它本身支持 multidex。
在 模组级别的 build.gradle中,确保填充了以下配置:
android { defaultConfig { multiDexEnabled true } } dependencies { implementation 'androidx.multidex:multidex:2.0.1' }
您需要安装显式的 multidex 支持。文档包括 这样做的三种方法,您必须选择 一。
例如,在 src/main/AndroidManifest.xml中,可以将 MultiDexApplication声明为 application:name:
src/main/AndroidManifest.xml
application:name
<manifest package="com.your.package" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:name="androidx.multidex.MultiDexApplication" /> </manifest>
以上所有的答案都很棒
还要添加这个,否则你的应用程序会像我的崩溃没有任何原因
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代码收缩。
minifyEnabled true
如果 minSdkVersion 设置为21或更高,则在默认情况下启用 multidex,并且不需要 multidex 库:
修改模块级 build.gradle 文件以启用 multidex 并添加 multidex 库作为依赖项,如下所示:
android { defaultConfig { ... minSdk = 15 targetSdk = 28 multiDexEnabled = true } ... } dependencies { implementation("androidx.multidex:multidex:2.0.1") }
如果重写 Application 类,则将其更改为扩展 MultiDexApplication (如果可能) ,如下所示:
public class MyApplication extends MultiDexApplication { ... }
或者,如果您确实重写了 Application 类,但是不可能更改基类,那么您可以重写 attachBaseContext ()方法和 callMultiDex.install (this)来启用 multidex:
public class MyApplication extends SomeOtherApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
更多信息请查看 这个博客