【问题标题】:When adding new jar files to lib folder getting class not found exception of previous module lib in studio将新的 jar 文件添加到 lib 文件夹时,在 studio 中找不到先前模块 lib 的类
【发布时间】:2016-10-21 16:47:54
【问题描述】:

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

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

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

这是我的毕业典礼:

   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'

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

【问题讨论】:

  • 请任何人为此提供解决方案..

标签: java android android-multidex


【解决方案1】:

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

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

  1. 您可以让您的 Application 类扩展自 MultiDexApplication

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

    public void onCreate(Bundle arguments) {
      MultiDex.install(getTargetContext());
      super.onCreate(arguments);
    }
    
  3. 如果您不使用自定义Application 类,您可以通过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>
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2020-10-05
    相关资源
    最近更新 更多