1

多くの JAR を使用する Android アプリがあり、65K メソッドの制限に達しました。この問題を解決するために、multi-dex オプションをサポートする Android Maven Plugin 4.0.0-rc.1 を使用しました。複数のdexファイルを含むAPKファイルを生成できました。classes.dex および classes2.dex です。

ただし、このアプリをタブレットにインストールして実行すると、次の例外が発生します。

com.mmh.application.MiApplication: java.lang.UnsupportedOperationException: Class loader not supported
09-24 20:29:52.672: E/AndroidRuntime(3810):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4733)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at android.app.ActivityThread.access$1600(ActivityThread.java:175)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at android.os.Handler.dispatchMessage(Handler.java:102)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at android.os.Looper.loop(Looper.java:146)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at android.app.ActivityThread.main(ActivityThread.java:5602)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at java.lang.reflect.Method.invokeNative(Native Method)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at java.lang.reflect.Method.invoke(Method.java:515)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at dalvik.system.NativeStart.main(Native Method)
09-24 20:29:52.672: E/AndroidRuntime(3810): Caused by: java.lang.UnsupportedOperationException: Class loader not supported
09-24 20:29:52.672: E/AndroidRuntime(3810):     at com.mmh.application.Dexter.loadAllDexes(Dexter.java:69)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at com.mmh.application.MiApplication.onCreate(MiApplication.java:292)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
09-24 20:29:52.672: E/AndroidRuntime(3810):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4730)
09-24 20:29:52.672: E/AndroidRuntime(3810):     ... 10 more

PR https://github.com/jayway/maven-android-plugin/pull/425で指定されているものと同じ Dexter クラスを使用しています。

MiApplication のスニペットを以下に示します -

public class MiApplication extends Application {
    public void onCreate() {
        Dexter.loadAllDexes(this);
        super.onCreate();
}

Dexter クラスのロードに使用していたクラスローダーを印刷しましたが、PathClassLoader を使用しているようです。

09-24 20:29:52.672: I/c*.m*.a*.Dexter(3810): Dexter Classloader dalvik.system.PathClassLoader: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.miairline-3.apk"],nativeLibraryDirectories=[/data/app-lib/com.miairline-3, /vendor/lib, /system/lib]]]

Dexter クラスは、DexClassLoader 以外からロードされた場合、「サポートされていないクラスローダー」例外をスローします。

Dexter クラスが DexClassLoader から確実にロードされるようにするにはどうすればよいですか? この「サポートされていないクラスローダー」の問題を解決するにはどうすればよいですか?

4

2 に答える 2