24

アプリで厄介なバグが発生しました。

Android 5.0.1/5.0.2 を実行している私の Nexus 5/7 では、すべて正常に動作します。ただし、以前のバージョン (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バージョンでこれらの問題を引き起こす理由は何ですか?

4

3 に答える 3

43

これをアプリケーションクラスに追加することで問題を解決しました。

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

5 より前のバージョンの Android には必要なようです。

于 2015-03-13T20:59:22.620 に答える
12

これが機能する方法は 3 つあります。

  1. @FireZenk が指摘したように、このクラスをAndroidManifest.xmlでアプリケーションとして宣言できます。
<application android:name="android.support.multidex.MultiDexApplication">

実際、Android グレードのプラグイン バージョン 0.14.0 とビルド ツール バージョン 21.1.0 では、defaultConfig、ProductFlavor、または BuildType で multiDexEnabled を true に指定すると、自動的に com.android.support:multidex:1.0.0 への依存が含まれます。androidDependencie タスクで確認するか、 ./gradlew -q android:dependencies コマンドを実行します (android: は私の android モジュールです)。したがって、明示的に追加する必要はありません

compile 'com.android.support:multidex:1.0.0'

アプリで Application クラスを拡張した場合:

  1. 次のように、アプリケーションが MultiDexApplication クラスを拡張することを定義します。
public class MyApplication extends MultiDexApplication {
    ...
}

または@ user2700475が投稿したように

  1. アプリケーションで attachBaseContext をオーバーライドします。
public class MyApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);}
}

以前の回答の助けを借りて、この問題の解決策を見つけることができました。これをすべてまとめたいだけです。

于 2015-07-09T09:41:35.020 に答える
6

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

于 2015-05-08T08:21:36.880 に答える