将新的 jar 文件添加到 lib 文件夹时,获取 class not found exception of previous module lib in studio

When adding new jar files to lib folder getting class not found exception of previous module lib in studio

我有一个 minSdkVersion API16 的应用程序,当我添加新的 jar 文件时 activation, additionnal, mail, itextpdf 用于发送 pdf 文件抛出电子邮件。它在下面为先前添加的模块库抛出异常:

原因:java.lang.ClassNotFoundException:未在路径中找到 class "com.viewpagerindicator.TabPageIndicator":DexPathList[[zip 文件“/data/app/com.inbridge.avakaash-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.inbridge.avakaash-1,/vendor/lib,/system/lib]]

如果我删除这些新的 jar 文件,那么它可以正常工作...

这是我的 gradle:

   apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.3'
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        applicationId "com.inbridge.avakaash"
        minSdkVersion 16
        targetSdkVersion 23
        multiDexEnabled true
    }
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    buildTypes {
        release {
            minifyEnabled false
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':library')
    compile files('libs/YouTubeAndroidPlayerApi.jar')
    compile project(':payUMoneysdk')
    compile files('libs/httpclient-win-4.4.1.jar')
    compile files('libs/httpmime-4.2.3.jar')
    compile files('libs/gcm.jar')
    compile 'com.android.support:appcompat-v7:23.0.0-alpha2'
    compile 'com.google.android.gms:play-services:8.4.0'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
    compile 'com.google.android.gms:play-services-identity:8.4.0'
    compile 'com.google.android.gms:play-services-gcm:8.4.0'
    compile 'com.google.android.gms:play-services-auth:8.4.0'

    compile files('libs/activation.jar')
    compile files('libs/additionnal.jar')
    compile files('libs/mail.jar')
    compile files('libs/itextpdf-5.5.9.jar')
    compile 'com.android.support:multidex:1.0.1'
}

这是我的settings.gradle

include ':library'
include ':payUMoneysdk'
include ':avakaash'

请任何人帮我解决这个错误...

问题是,当您针对早于 5.0 Lollipop 的设备时,multiDexEnabled true 还不够。如果你想支持 KitKat 和更早版本,那么除了这个标志之外,你还必须部署辅助 dexes 使你的主要 Application class,如 in the official docs.

所述

有多种方法可以做到这一点:

  1. 您可以让您的 Application class 从 MultiDexApplication

    扩展
    public class MyApplication extends MultiDexApplication {
    
  2. 您可以将以下行添加到您的 Application class:

    public void onCreate(Bundle arguments) {
      MultiDex.install(getTargetContext());
      super.onCreate(arguments);
    }
    
  3. 如果您不使用自定义 Application class,您可以通过 AndroidManifest.xml:

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