2017-01-30 107 views
1

TL无论是Java和Android子项目; DR:是开发既纯Java和Android应用程序的唯一途径,是完全不同的摇篮项目?摇篮:在同一项目中

我开发一个项目,该项目包括一个Android应用程序和Java后端(与其他一些常用的API一起)。
作为一个IDE,我正在使用IntelliJ Idea。
我想要一个Gradle项目(它将在一个Idea实例上打开)包含所有应用程序作为子项目。

我的问题是,为了让Android插件,我需要将其设置在buildScript部分build.gradle文件:

dependencies { 
    classpath 'com.android.tools.build:gradle:2.2.3' 
} 

这迫使整个摇篮建设过程中的Android插件,和原因纯Java子项目中的错误(它们自动设置为使用Android SDK而不是Java SDK构建)。

我还以为是创建两个单独的项目(一个用于Android系统,一个用于Java的),出口共同JAR文件到本地Maven仓库,从那里将其导入到Android项目的解决方法。

有没有更好的解决方案,将让我有在同一个地方的所有代码库?

+0

您可以在使用Android Studio的单个项目中创建android和java模块。对于android gradle,使用'apply plugin:'com.android.application''和java gradle use'apply plugin:'java'' –

+0

这不会起作用:我收到一条消息:'带ID的插件'com.android .application'not found.'这个插件只有在我将'build.radle'部分的'com.android.tools.build:gradle:2.2.3'添加到class path dependency时才会被识别。 –

+0

是的。应该将其添加到项目级别的gradle文件中 –

回答

0

每个项目都有它自己的buildscript类路径

根/的build.gradle

project(':java-project') { 
    apply plugin: 'java' 
} 

project(':andoid-project') { 
    buildscript { 
     dependencies { 
      classpath 'com.android.tools.build:gradle:2.2.3' 
     } 
    } 
    apply plugin: 'android' 
} 
+0

也许我做错了什么,但是这仍然强制Android插件类路径到所有项目。这里是如何的'根/ build.gradle'样子: allprojects { 集团com.navnplay' 应用插件: '想法' 库{ mavenCentral() }} '项目(“: navnplay-应用'){ buildscript { 库{ jcenter() } 依赖{ 类路径 'com.android.tools.build:gradle:2.2.3' }} } ' –

+0

很难说。 ..但我认为你在'allprojec中设置'buildscript' ts' closure ......顾名思义......影响所有项目 –

+0

'buildscript'肯定在项目部分,而不在'allprojects'部分。 –

0

我不是一个Android用户,但也许你需要调整对java的JavaCompile任务不仅是项目,使得编译器分叉并使用javac

allprojects { 
    if (plugins.hasPlugin('java') && !plugins.hasPlugin('android')) { 
     tasks.withType(JavaCompile) { 
      options.fork = true 
      options.forkOptions.executable = '/path/to/javac' 
     } 
    } 
} 
0

你所要求的是可能的不同:你只需要将buildscript声明从项目移至android模块。

项目build.gradle可能是这样的:

buildscript { 
    // nothing for the project 
} 

allprojects { 
    repositories { 
     jcenter() // you could also move this to each module 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

和Android MODULE build.gradle可能看起来像这样:

apply plugin: 'com.android.application' 
// other pluguins 

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.3.1' 
     // other dependencies for the build (apt, retrolambda...) 
    } 
} 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "my.android.app" 
     // additional config... 
    } 
} 

dependencies { 
    // your app dependencies here 
} 

其他模块,如后端或网页,可以宣布自己buildscripts与他们自己的插件,存储库和依赖关系。