如果jar是在AndroidStudio中创建的,则为ClassNotFoundException

时间:2015-01-13 13:19:24

标签: android reflection jar sdk android-studio

我正在开发使用由我自己开发的3个库的SDK。 我曾经使用Eclipse,所以我有4个项目: SDK为1,库为3。 3中的每一个都被标记为库,因此在该项目的bin文件夹中创建了jar文件。 在SDK项目中,我将jar添加到构建路径中,一切正常。

转移到AndroidStudio后,我创建了一个包含4个模块的新项目: SDK的1个模块和每个库的3个模块。 我在每个模块的build.gradle文件中放入了一个从类文件创建jar的代码(使用this question)。 在SDK的build.gradle中,我将依赖项放在这些jar文件中,但是在运行时我得到了ClassNotFoundException。

我解压缩了罐子,看起来没有找到放在正确位置的类(相同的库路径)。 我拿了罐子并尝试在Eclipse中导入它们但是我在运行时又得到了相同的错误消息。我进行了额外的测试: 在SDK代码中我尝试使用该类,因此我声明了一个抛出异常的类的变量,并且没有编译错误,并且导入具有相同的异常路径。

注意:我尝试在运行时使用反射加载类。

您是否知道该过程中出现了什么问题,或者有任何更好的建议如何实现相同的行为?

感谢。

编辑:

3个库的build.gradle:

    apply plugin: 'com.android.library'

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.1"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
    }
   }

   dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
  }

task libraryOneJar(type: Jar, dependsOn: 'compileDebugJava') {

    from "$buildDir/intermediates/classes/debug/"
}

这是使用SDK和3个库的测试应用程序的build.gradle

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "com.galvan.mypackage"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.android.gms:play-services:6.1.+'
    compile files('libs/sdk.jar')
    compile files('libs/library1.jar')
    compile files('libs/library2.jar')
    compile files('libs/library3.jar')
}

使用上面的build.gradle它不起作用,但它在更改依赖项部分时有效:

   dependencies {
            compile fileTree(dir: 'libs', include: ['*.jar'])
            compile 'com.android.support:appcompat-v7:21.0.3'
            compile 'com.google.android.gms:play-services:6.1.+'
                compile project(':sdk')
            compile project(':library1')
            compile project(':library2')
            compile project(':library3')
}

0 个答案:

没有答案