【发布时间】:2014-04-15 13:07:48
【问题描述】:
在 android studio 的一个 gradle 项目中,我的 android 模块旁边有一个纯 java 模块。此 java 模块依赖于 .jar 文件。当我运行我的 android 应用程序时,我得到了这个:
04-15 14:42:02.854 12528-12528/se.springworks.apiexample.androidexampleapp W/ApplicationPackageManager﹕ getCSCPackageItemText()
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp I/dalvikvm﹕ Failed resolving Lse/springworks/api/client/ServerConfig; interface 1557 'Lorg/aeonbits/owner/Config;'
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp W/dalvikvm﹕ Link of class 'Lse/springworks/api/client/ServerConfig;' failed
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp I/dalvikvm﹕ Failed resolving Lse/springworks/api/client/ServerConfig; interface 1557 'Lorg/aeonbits/owner/Config;'
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp W/dalvikvm﹕ Link of class 'Lse/springworks/api/client/ServerConfig;' failed
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp E/dalvikvm﹕ Could not find class 'se.springworks.api.client.ServerConfig', referenced from method se.springworks.api.client.M2HClient.<init>
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp W/dalvikvm﹕ VFY: unable to resolve const-class 1729 (Lse/springworks/api/client/ServerConfig;) in Lse/springworks/api/client/M2HClient;
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp D/dalvikvm﹕ VFY: replacing opcode 0x1c at 0x000c
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp I/dalvikvm﹕ Failed resolving Lse/springworks/api/client/ServerConfig; interface 1557 'Lorg/aeonbits/owner/Config;'
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp W/dalvikvm﹕ Link of class 'Lse/springworks/api/client/ServerConfig;' failed
04-15 14:42:02.864 12528-12528/se.springworks.apiexample.androidexampleapp D/AndroidRuntime﹕ Shutting down VM
java.lang.NoClassDefFoundError: se.springworks.api.client.ServerConfig
at se.springworks.api.client.M2HClient.<init>(M2HClient.java:53)
at se.springworks.apiexample.androidexampleapp.ExampleActivity.onCreate(ExampleActivity.java:23)
at android.app.Activity.performCreate(Activity.java:5426)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
现在,ServerConfig 是我自己的类,但它扩展了一个类“Config”,如上所示。这符合 Owner (http://owner.aeonbits.org/docs/usage/) 的用法。我不太明白为什么找不到这些类或出了什么问题。我试过直接在一个 android 模块中使用 owner 并且效果更好(首先,它不会崩溃)。据我所知,这是一个依赖配置问题,但我真的可以在这里使用。这是我使用缺少的类的子模块的 build.gradle 文件
apply plugin: 'java'
sourceCompatibility = 1.5
version = '1.0'
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
repositories {
mavenCentral()
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
}
}
dependencies {
//Maven syntax groupings...
compile group: "com.squareup.retrofit", name: "retrofit", version: "1.5.0"
compile group: "com.squareup.okhttp", name: "okhttp", version: "1.5.3"
testCompile group: 'junit', name: 'junit', version: '4.10'
//Gradle syntax...
compile 'commons-codec:commons-codec:1.2'
//compile 'org.aeonbits.owner:owner:1.0.5'
compile fileTree(dir: 'libs', include: '*.jar')
testCompile 'org.mockito:mockito-all:1.8.4'
}
这是 android 模块的 build.gradle:
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile project(':m2h-api-java-client')
compile 'com.android.support:appcompat-v7:19.+'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
我觉得可能缺少一些东西。
【问题讨论】:
-
尝试将
include: ['*.jar'])更改为include: '**/*.java' -
为什么要注释掉
org.aeonbits.owner:owner:1.0.5依赖? -
因为我使用的是 .jar。 :)
标签: java android gradle multi-module