アプリで厄介なバグが発生しました。
Nexus 5/7では、Android 5.0.1/5.0.2を実行すると、すべて正常に動作します。ただし、以前のバージョン(テスト済み4.4 .4および4.3)次のエラーが表示されます。
03-13 13:49:41.140 21714-21714/? E/dalvikvm﹕ Could not find class 'com.default.package.application.model.Appcomponent', referenced from method com.default.package.application.controller.DatabaseHandler.getScreenComponents
03-13 13:49:41.140 21714-21714/? E/dalvikvm﹕ Could not find class 'Android.support.v7.app.ActionBarActivityDelegate$1', referenced from method Android.support.v7.app.ActionBarActivityDelegate.<init>
03-13 13:49:41.140 21714-21714/? E/dalvikvm﹕ Could not find class 'Android.support.v7.app.ActionBarActivityDelegateHC', referenced from method Android.support.v7.app.ActionBarActivityDelegate.createDelegate
03-13 13:49:41.140 21714-21714/? E/dalvikvm﹕ Could not find class 'Android.support.v7.app.ActionBarActivityDelegateBase', referenced from method Android.support.v7.app.ActionBarActivityDelegate.createDelegate
03-13 13:49:41.150 21714-21714/? E/dalvikvm﹕ Could not find class 'Android.support.v7.app.ActionBarActivityDelegate$ActionBarDrawableToggleImpl', referenced from method Android.support.v7.app.ActionBarActivityDelegate.getDrawerToggleDelegate
03-13 13:49:41.150 21714-21714/? E/dalvikvm﹕ Could not find class 'Android.support.v7.internal.view.SupportMenuInflater', referenced from method Android.support.v7.app.ActionBarActivityDelegate.getMenuInflater
03-13 13:49:41.150 21714-21714/? E/dalvikvm﹕ Could not find class 'Android.support.v7.app.ActionBarActivityDelegate$ActionBarDrawableToggleImpl', referenced from method Android.support.v7.app.ActionBarActivityDelegate.getV7DrawerToggleDelegate
03-13 13:49:41.150 21714-21714/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.default.package, PID: 21714
Java.lang.NoClassDefFoundError: Android.support.v7.app.ActionBarActivityDelegateHC
Support.v7ライブラリをjarとして追加しようとしましたが、違いはありません。しかし、Lollipopデバイスで動作するため、これはとにかく意味がありません。
Dalvik/Artの変更に関する問題があるのでしょうか?または、かなり大きなアプリなのでcom.Android.support:multidex:1.0.0を使用しなければならなかったという事実かもしれません。
更新:いくつかの依存関係を削除して、65kメソッドの制限内に収めようとしました。その後、アプリは4.4.4および4.3デバイスで実行されました。 multidexサポートを有効にするために私がしたことはすべて設定
multiDexEnabled true
defaultConfigセクションで追加
compile 'com.Android.support:multidex:1.0.0'
私のbuild.gradleの依存関係セクションの下に。
これが古いAndroid=バージョンでこれらの問題を引き起こす理由は?
これをアプリケーションクラスに追加することで問題を解決しました。
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
Android 5.より前のバージョンでは必要なようです。
これが機能する方法は3つあります。
<application Android:name="Android.support.multidex.MultiDexApplication">
そして実際には、defaultConfig、ProductFlavor、またはBuildTypetheでmultiDexEnabledをtrueに指定すると、Android gradeプラグインバージョン0.14.0およびビルドツールバージョン21.1.0で、com.Androidへの依存関係が自動的に含まれます。 .support:multidex:1.0.0。androidDependencieタスクで確認するか、。/ gradlew -q Android:dependenciesコマンドを実行できます(Android:is my Android module)。明示的に追加する必要はありません
compile 'com.Android.support:multidex:1.0.0'
アプリでApplicationクラスを拡張した場合:
public class MyApplication extends MultiDexApplication {
...
}
または@ user2700475のような投稿
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);}
}
以前の回答の助けを借りて、この問題の解決策を見つけることができました。これをすべてまとめたいだけです。
Applicationクラスを持っていない/使用していない場合は、これを置くことができます:
Android:name="Android.support.multidex.MultiDexApplication"
AndroidManifest.xmlのタグに
Applicationクラスを既に実装している場合は、@ user2700475 + @sirvon応答が最適な選択です。
また、明らかに、Gradle依存関係を追加する必要があります。
compile 'com.Android.support:multidex:1.0.0'
65kメソッドの問題に関する詳細情報: https://developer.Android.com/tools/building/multidex.html