我在Android Studio上有一个具有以下结构的项目:
项目
| - >应用
| - >芯
核心它是一个像库一样创建的项目,可以在其他应用程序上重用并具有此gradle配置。
apply plugin: 'com.android.library'
android {
compileSdkVersion 20
buildToolsVersion "19.1.0"
defaultConfig {
applicationId "com.porject.core"
minSdkVersion 14
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions{
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/notice.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:20.0.0'
compile 'net.hockeyapp.android:HockeySDK:3.0.+'
compile 'com.octo.android.robospice:robospice:1.4.6'
compile 'org.droidparts:droidparts:2.0.5'
compile 'com.octo.android.robospice:robospice-spring-android:1.4.12'
compile 'com.google.code.gson:gson:1.7.2'
compile 'net.sourceforge.htmlcleaner:htmlcleaner:2.2'
compile 'io.segment.android:analytics:1.2.0@aar'
compile "com.mixpanel.android:mixpanel-android:4.2.1@aar"
}
app gradle具有以下配置:
apply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion '19.1.0'
defaultConfig {
applicationId "com.project.app"
minSdkVersion 14
targetSdkVersion 18
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions{
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/notice.txt'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project (':core')
}
这会编译并带来所有依赖项,但是当我运行应用程序时会抛出此错误
java.lang.NoClassDefFoundError:com.project.R $ string 在com.project.utils.Preferences.getClientId(Preferences.java:178) 在com.project.utils.ConfigUtils.findClientResourceId(ConfigUtils.java:68) 在com.project.utils.ConfigUtils.getSegmentIOKey(ConfigUtils.java:118) 在com.project.utils.EventTracker.onScreenCreate(EventTracker.java:127) 在com.project.activity.BaseActivity.onCreate(BaseActivity.java:104) 在com.project.app.activity.SplashScreenActivity.onCreate(SplashScreenActivity.java:23) 在android.app.Activity.performCreate(Activity.java:5133) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 在android.app.ActivityThread.access $ 600(ActivityThread.java:141) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256) 在android.os.Handler.dispatchMessage(Handler.java:99) 在android.os.Looper.loop(Looper.java:137) 在android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) 在java.lang.reflect.Method.invoke(Method.java:525) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 在dalvik.system.NativeStart.main(本地方法)
我做了一些研究,我认为该项目没有找到在核心上创建的R,也许我在gradle或其他什么地方缺少一些配置。
感谢您的时间,我愿意接受任何建议。 问候 凯撒
答案 0 :(得分:0)
您需要在项目的根目录中有一个settings.gradle
文件。该文件中的项目顺序很重要。确保您首先提到了库项目,然后是应用程序。在您的示例中,settings.gradle
应如下所示:
include ':core', ':app'