Android : app loading library at runtime on Lollipop but not IceCreamSandwich

后端 未结 4 672
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-05 11:10

I\'m currently developping an Android app using Android Studio. Currently, the app is launching perfectly on Lollipop devices, but crashes at launch due to a ClassNotF

相关标签:
4条回答
  • 2020-12-05 11:36

    On some low-end devices adding MultiDex.install(getBaseContext()); to MyApplication onCreate() did not work? causing java.lang.NoClassDefFoundError:

    What did work was adding MultiDex.install(getBaseContext());to MyApplication attachBaseContext(Context base)

    public class MyApplication extends Application {
    ...
       @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(base);
        }
    ...
    
    0 讨论(0)
  • 2020-12-05 11:37

    1) Add multidex support to your app:

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

    2) Set your application as a MultiDexApplication. Select one of the options below:

    This is the source code of android's MultiDexApplication class:

    public class MultiDexApplication extends Application {
        public MultiDexApplication() {
        }
    
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    }
    

    Option 1) You can extend your custom application from MultiDexApplication:

    public class MyApplication extends MultiDexApplication {
        // Your application implementation here
    }
    

    Option 2) You can extend your custom application from default Application class, then you need to call MultiDex.install at attachBaseContext(Context base) method:

    public class MyApplication extends Application {
    
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            MultiDex.install(this);
        }
    
        // Your application implementation here
    }
    

    Option 3) If you don't have any custom application and you don't want any, simply set your application name (at AndroidManifest.xml) to MultiDexApplication:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.android.multidex.myapplication">
        <application
            ...
            android:name="android.support.multidex.MultiDexApplication">
            ...
        </application>
    </manifest>
    

    Note: If you are using a custom application class (see Option1 and Option2), application tag's android:name must already be set to your custom application class.

    3) Add multiDexEnabled true setting to your build.gradle file:

    defaultConfig {
        // Other settings here
        multiDexEnabled true
    }
    

    More information.

    0 讨论(0)
  • 2020-12-05 11:38

    You can add this in Application tag of manifest file.

    android:name="android.support.multidex.MultiDexApplication"
    
    0 讨论(0)
  • 2020-12-05 11:41

    I forgot to add this line right after the super call in the onCreate() method of my custom application class :

     MultiDex.install(getBaseContext());
    

    Thanks Kane for the solution !

    0 讨论(0)
提交回复
热议问题