最近,我一直在努力解决android系统中的多重运行问题,我脑海中浮现了这个问题:
在android项目中启用multiDex
如果您只添加这一行:
// gradle build config
multiDexEnabled true
该应用程序将编译和工作良好。
但是真正的解决方案是:
multiDexEnabled true
androidx.multidex
Application
类.为什么只添加multiDexEnabled true
并成功运行?剩下的两个步骤是吗?
我没在考虑什么吗?
顺便说一下,我的minSdkVersion
是15
发布于 2020-02-16 07:18:39
这里是Google自己的链接。
当应用程序及其引用的库超过65,536个方法时,您会遇到一个构建错误,表明应用程序已达到Android构建体系结构的极限:
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
构建系统的旧版本报告了一个不同的错误,这表明了相同的问题:
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
这两种错误条件都显示一个公共数字: 65536。这个数字表示代码在单个Dalvik Executable (DEX)字节码文件中可以调用的引用总数。本页面解释了如何通过启用一个名为multidex的应用程序配置来克服这个限制,它允许应用程序构建和读取多个DEX文件。
关于64K参考极限的
Android应用程序(APK)文件以Dalvik executable (DEX)文件的形式包含可执行字节码文件,其中包含用于运行应用程序的编译代码。Dalvik Executable规范将单个DEX文件中可引用的方法总数限制为65,536个--包括您自己代码中的Android框架方法、库方法和方法。在计算机科学中,术语Kilo,K,表示1024 (或2^10)。因为65,536等于64×1024,这个限制被称为'64K参考极限‘。
Android5.0之前的Multidex支持
Android5.0之前的平台版本(API级别21)使用Dalvik运行时来执行应用程序代码。默认情况下,Dalvik将每个APK的应用程序限制为一个classes.dex字节码文件。为了克服这个限制,您可以将multidex支持库添加到您的项目中:
dependencies {
def multidex_version = "2.0.1"
implementation 'androidx.multidex:multidex:$multidex_version'
}
如果不使用AndroidX,则添加以下支持库依赖项:
implementation 'com.android.support:multidex:1.0.3'
build.gradle
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
根据是否覆盖应用程序类,
如果不覆盖应用程序类,请编辑清单文件以在标记中设置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>
如果确实覆盖了应用程序类,请将其更改为扩展MultiDexApplication (如果可能的话)如下:
public class MyApplication extends MultiDexApplication { ... }
或者,如果您确实重写了应用程序类,但是无法更改基类,则可以重写attachBaseContext()方法并调用MultiDex.install(this)来启用multidex
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
发布于 2020-02-16 07:01:25
当应用程序超过了方法/dex大小限制(64K)时,就会发生这种情况。
由于您的minSdk是15,所以必须手动添加MultiDex,这在Api 21+上是不需要的。
在Pre-21上执行以下支持MultiDex的操作
dependencies { implementation 'com.android.support:multidex:1.0.3' }
使应用程序类扩展MultiDexApplication
public class Application extends MultiDexApplication {}
如果您根本不想使用..,则可以使用MultiDex来删除未使用的类和方法。
https://stackoverflow.com/questions/60246016
复制相似问题