我正在开发使用由我自己开发的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')
}