我想使用新的Multidex支持库来破解我的某个应用的方法限制。
借助Android Lollipop,谷歌推出了一个multidex支持库,可以轻松实现多索引。
使用此库需要哪些步骤以及使用multidex支持构建我的应用程序?
答案 0 :(得分:260)
修改强>
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 {
compile 'com.android.support:multidex:1.0.3'
}
如果您正在运行单元测试,则需要将其包含在Application
课程中:
public class YouApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
或者只是让application
班级延长MultiDexApplication
public class Application extends MultiDexApplication {
}
有关详细信息,请is a good guide.
答案 1 :(得分:43)
启动多dexing需要以下步骤:
将android-support-multidex.jar添加到您的项目中。 jar可以在Android SDK文件夹中找到/ sdk / extras / 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构建一个多dexed 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 blog找到更多信息。
答案 2 :(得分:17)
简单,为了启用multidex,你需要......
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
您还必须更改清单文件。在清单中,将Multidex支持库中的MultiDexApplication类添加到应用程序元素中,如此
<?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>
答案 3 :(得分:9)
在 build.gradle 中添加此依赖项:
compile 'com.android.support:multidex:1.0.1'
再次在 build.gradle 文件中将此行添加到 defaultConfig 块:
multiDexEnabled true
而不是从应用程序扩展您的应用程序类,而不是从 MultiDexApplication 扩展它;喜欢:
public class AppConfig extends MultiDexApplication {
现在你很高兴去!如果您需要它,MultiDexApplication
所做的全部是
public class MultiDexApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
答案 4 :(得分:5)
这是自2020年10月起使用Android X的最新方法。这来自Android文档“ Enable multidex for apps with over 64K methods”。
minSdk
> = 21 您无需执行任何操作。所有这些设备都使用Android RunTime(ART)VM,该VM本机支持multidex。
minSdk
<21 在您的模块级build.gradle
中,确保填充以下配置:
android {
defaultConfig {
multiDexEnabled true
}
}
dependencies {
implementation 'androidx.multidex:multidex:2.0.1'
}
您需要安装显式的multidex支持。该文档包括three methods to do so,您必须选择一个。
例如,在您的src/main/AndroidManifest.xml
中,您可以将MultiDexApplication
声明为application:name
:
<manifest package="com.your.package"
xmlns:android="http://schemas.android.com/apk/res/android">
<application android:name="androidx.multidex.MultiDexApplication" />
</manifest>
答案 5 :(得分:3)
第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);
}
}
第3步:更改grade.properties
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
它会工作!感谢。
答案 6 :(得分:1)
首先你应该尝试使用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'
}
}
}
答案 7 :(得分:1)
使用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
使用代码收缩。
答案 8 :(得分:0)
如果您想在项目中启用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)
启用multidex。
最后加入你的清单
<?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>
答案 9 :(得分:0)
添加到AndroidManifest.xml:
android:name="android.support.multidex.MultiDexApplication"
OR
MultiDex.install(this);
在自定义应用程序的attachBaseContext方法
中或您的自定义应用程序扩展MultiDexApplication
在build.gradle中添加multiDexEnabled = true
defaultConfig {
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
}
答案 10 :(得分:0)
build.gradle
multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'
AndroidManifest.xml
<application
android:name="androidx.multidex.MultiDexApplication"
答案 11 :(得分:0)
以上所有答案都很棒
还添加此内容,否则您的应用将像我的一样崩溃,毫无原因
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
答案 12 :(得分:-2)
只需在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****
}
}
答案 13 :(得分:-2)
Multi_Dex.java
public class Multi_Dex extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}