我无法禁用我的Multidex支持.我不知道为什么我会遇到这个问题.试图在网上找到解决方案,但没有帮助.
这是我得到的例外.
java.lang.NoClassDefFoundError: com.twitter.sdk.android.core.TwitterAuthConfig$1 at com.twitter.sdk.android.core.TwitterAuthConfig.<clinit>(TwitterAuthConfig.java:39) at MyApplication.onCreate(MyApplication.java:46) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4702) at android.app.ActivityThread.access$1400(ActivityThread.java:168) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1389) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5493) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) at dalvik.system.NativeStart.main(Native Method)
这是我的app.gradle
buildscript { repositories { maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'io.fabric.tools:gradle:1.+' } } apply plugin: 'com.android.application' apply plugin: 'io.fabric' repositories { maven { url 'https://maven.fabric.io/public' } mavenCentral() } android { packagingOptions { exclude 'Meta-INF/NOTICE.txt' exclude 'Meta-INF/LICENSE.txt' } compileSdkVersion 22 buildToolsVersion "23.0.0 rc3" defaultConfig { minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } } dexOptions { javaMaxHeapSize "2g" } } dependencies { compile fileTree(dir: 'libs',include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.1' compile 'com.android.support:multidex:1.0.1' compile 'com.android.support:design:22.2.1' compile 'com.android.support:recyclerview-v7:22.2.1' compile 'com.android.support:cardview-v7:22.2.1' compile 'com.android.support:support-v4:22.2.1' compile project(':MPChartLib') compile 'com.facebook.android:facebook-android-sdk:4.6.0' compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') { transitive = true; } compile('com.twitter.sdk.android:twitter:1.8.0@aar') { transitive = true; } }
这是MyApplication类中的Twitter代码.
@Override public void onCreate() { super.onCreate(); //Configure twitter using Twitter key and Secret Key TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY,TWITTER_SECRET); // add functionalities which we are using with Fabric Fabric.with(this,new Crashlytics(),new Twitter(authConfig)); FacebookSdk.sdkInitialize(getApplicationContext()); // Initialize the SDK before executing any other operations,// especially,if you're using Facebook UI elements. }
任何提示或参考赞赏.
解决方法
Android 5.0 and higher uses a runtime called ART which natively
supports loading multiple dex files from application APK files. ART
performs pre-compilation at application install time which scans for
classes(..N).dex files and compiles them into a single .oat file for
execution by the Android device. For more information on the Android
5.0 runtime,see Introducing ART.
这意味着您的应用程序可以在API级别21或更高级别上正常运行.
Android 5.0之前的Multidex支持
Versions of the platform prior to Android 5.0 use the Dalvik runtime
for executing app code. By default,Dalvik limits apps to a single
classes.dex bytecode file per APK. In order to get around this
limitation,you can use the multidex support library,which becomes
part of the primary DEX file of your app and then manages access to
the additional DEX files and the code they contain.
所以,首先要确保你已经导入了正确的依赖,这似乎你做到了.
dependencies { compile 'com.android.support:multidex:1.0.1' }
在清单中,将Multidex支持库中的MultiDexApplication类添加到application元素中.
<?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>
替代方案,如果您的应用程序扩展了Application类,您可以覆盖attachBaseContext()方法并调用MultiDex.install(this)来启用multidex.
public void onCreate(Bundle arguments) { MultiDex.install(getTargetContext()); super.onCreate(arguments); ... }
最后,您需要通过添加multiDexEnabled true来更新build.gradle文件,如下所示:
defaultConfig { applicationId '{Project Name}' minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true }
我希望它会帮助你.