アプリでMultiDexApplicationを使用しようとしましたが、アプリケーションアクティビティを拡張しようとするとクラスが認識されません。
ここに私のbuild.gradleファイルがあります:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 21
buildToolsVersion '21.0.1'
defaultConfig {
applicationId 'com.myapp'
minSdkVersion 10
targetSdkVersion 21
versionCode 115
versionName '4.8'
}
buildTypes {
debug {
debuggable true
runProguard false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
release {
debuggable false
runProguard true
zipAlign true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
lintOptions {
checkReleaseBuilds false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.Android.gms:play-services:6.1.11'
compile 'com.Android.support:appcompat-v7:21.0.0'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.viewpagerindicator:library:2.4.1@aar'
compile project(':facebook')
}
21でコンパイルしていることがわかります。最新のビルドツール、および最新のGoogle Playサービスとサポートライブラリを使用しています。
誰かがこれを機能させましたか?
MultiDexApplicationクラスは、appcompat-v7ライブラリの一部ではありません。別のjar(Android-support-multidexと呼ばれる)で出荷されています。
Android-support-multidex.jarを/ sdk/extras/Android/support/multidex/library /の下に見つけますlibs(サポートライブラリのリビジョン21から入手可能)をプロジェクトのlibsフォルダーにコピーします。
更新(2014年11月5日):
jarが中央リポジトリで利用可能になりました。
dependencies {
...
compile 'com.Android.support:multidex:1.0.0'
}
詳細については、 here を参照してください。
この質問はかなり古いものですが、API <21の1つのAPKとして異なるモジュールを一緒にビルドしようとすると、マルチモジュールのセットアップでこのエラーが発生しました。
AndroidXを使用している場合は、古いmultidex依存関係を必ず置き換えてください
compile 'com.Android.support:multidex:1.0.3'
新しいものと
implementation 'androidx.multidex:multidex:2.0.0'
私は [〜#〜] this [〜#〜] に従い、サポートライブラリのr21にMultiDexApplicationを含めるべきであるというブログ投稿に従いました。
My IDEも解決に問題がありました。
[〜#〜] multidex [〜#〜] githubプロジェクトを追加して、今のところ動作させました(プロジェクトのページで詳細を確認できます)。
Android {
dexOptions {
preDexLibraries = false
}
}
repositories {
jcenter()
}
dependencies {
compile 'com.google.Android:multidex:0.1'
}
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
dx.additionalParameters += '--multi-dex' // enable multidex
dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
}
}
次の内容の$ project_dir/multidex.keepファイルを追加します。
Android/support/multidex/BuildConfig.class
Android/support/multidex/MultiDex$V14.class
Android/support/multidex/MultiDex$V19.class
Android/support/multidex/MultiDex$V4.class
Android/support/multidex/MultiDex.class
Android/support/multidex/MultiDexApplication.class
Android/support/multidex/MultiDexExtractor$1.class
Android/support/multidex/MultiDexExtractor.class
Android/support/multidex/ZipUtil$CentralDirectory.class
Android/support/multidex/ZipUtil.class
Githubプロジェクトページには、MultiDexApplicationクラスの実装の内容に関するいくつかの考慮事項も記載されています。
- アプリケーションクラスの静的フィールドは、MultiDex#installが呼び出される前にロードされます!そのため、メインのclasses.dexファイルから配置できる型の静的フィールドを避けることをお勧めします。
- アプリケーションクラスのメソッドは、アプリケーションクラスの後にロードされる他のクラスにアクセスできない場合があります。これに対する回避策として、別のクラス(上記の例ではRunnableを使用する任意のクラス)を作成し、その中のメソッドコンテンツを実行できます。