2

大きすぎて 1 つの dex ファイルに収まらないアプリがあるため、multidex を使用しています。特定のマシンで作成すると正常に動作しますが、別のマシンで作成すると、すべてではなく一部のデバイスでアプリがクラッシュします (注 2 でクラッシュし、Nextus 6 で動作します)。

8519-8519/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError: android.support.multidex.MultiDexExtractor
            at android.support.multidex.MultiDex.install(MultiDex.java:159)
            at com.myapp.MyApplication.onCreate(MyApplication.java:39)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1014)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4228)
            at android.app.ActivityThread.access$1300(ActivityThread.java:140)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1287)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4898)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
            at dalvik.system.NativeStart.main(Native Method)

APK を逆コンパイルしたところ、MultiDexExtractor クラスがあるべきところの classes.dex ではなく、classes2.dex にあることがわかりました。

gradle v1.0.0以降では、すべてのクラスが正しいdexに自動的に配置されていると思いましたか? 何か案は?

gradleファイルに、追加しました

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

依存関係と

multiDexEnabled true

デフォルトの設定で

次に、アプリケーション ファイルで:

@Override
public void onCreate() {
    MultiDex.install(this);
    super.onCreate();
}

Androidビルドツールを使用しています22.0.1

そして、ここに私のgradleバージョンがあります:

$ ./gradlew --version

------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------

Build time:   2014-11-24 09:45:35 UTC
Build number: none
Revision:     6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a

Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_25 (Oracle Corporation 25.25-b02)
OS:           Mac OS X 10.9.5 x86_64
4

1 に答える 1

1

まず、mutidex の最近のバージョンは 1.0.1 であるため、依存関係を更新することをお勧めします。第 2 に、Application クラス全体を示していませんでしたが、現在持っているものが必要であることが本当にわかっている場合を除きandroid.support.multidex.MultiDexApplication、MultiDexApplication がこれを処理するため、すべての init を気にする必要がないように拡張することをお勧めします。アプリで MultiDex を使用しても問題はありませんでしたが、android.support.multidex.MultiDexApplication自分自身を拡張しています。

于 2015-07-31T20:39:01.890 に答える