새로운 Multidex 지원 라이브러리를 사용하여 내 앱 중 하나의 방법 제한을 깨고 싶습니다.
Google은 Android Lollipop을 통해 멀티 덱스를 쉽게 만들 수있는 멀티 덱스 지원 라이브러리를 도입했습니다.
이 라이브러리를 사용하고 멀티 덱스 지원으로 내 앱을 빌드하려면 어떤 단계가 필요합니까?
답변
편집하다:
Android 5.0 (API 레벨 21) 이상은 멀티 덱싱을 지원하는 ART를 사용합니다. 따라서 minSdkVersion
21 이상인 경우 멀티 덱스 지원 라이브러리가 필요하지 않습니다.
당신의 수정 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
클래스 에 포함 시키려고합니다.
public class YouApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
아니면 그냥 application
수업을 확장MultiDexApplication
public class Application extends MultiDexApplication {
}
자세한 내용 은 이 안내서를 참조하십시오.
답변
멀티 덱싱을 시작하려면 다음 단계가 필요합니다.
프로젝트에 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);
}
재정의 접근법을 사용했는데 응용 프로그램 클래스의 클래스 계층 구조를 망칠 수 없습니다.
이제 앱에서 멀티 덱스를 사용할 수 있습니다. 다음 단계는 gradle에게 multi 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 블로그를 참조하십시오 .
답변
간단히, 멀티 덱스를 활성화하려면 다음을 수행해야합니다.
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 클래스를 다음과 같이 애플리케이션 요소에 추가하십시오.
<?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
Application 에서 어플리케이션 클래스를 확장하는 대신 MultiDexApplication 에서 어플리케이션 클래스를 확장하십시오 . 처럼 :
public class AppConfig extends MultiDexApplication {
이제 잘 가세요! 필요한 경우 모든 MultiDexApplication
것이
public class MultiDexApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
답변
build.gradle
multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'
AndroidManifest.xml
<application
android:name="androidx.multidex.MultiDexApplication"
답변
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
작동합니다!. 감사.
답변
다음은 2020 년 5 월 현재 Android X를 사용한 최신 접근 방식입니다.
옵션 minSdk
> = 21
당신은 아무것도 할 필요가 없습니다. 이러한 모든 장치는 멀티 덱스를 기본적으로 지원하는 Android RunTime (ART) VM을 사용합니다.
들어 minSdk
<21
당신의에서 모듈 -level build.gradle
, 다음과 같은 구성되었는지 확인합니다 :
android {
defaultConfig {
multiDexEnabled true
}
}
dependencies {
implementation 'androidx.multidex:multidex:2.0.1'
}
그런 다음 다음과 같이 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>