我需要一个明确的示例,说明如何使用任意项目扩展Android Gradle项目。
任意我的意思是它不能只使用'java'插件,因为据我所知它不支持buildTypes。我目前正在使用“ant”任务,它有两个调试和发布目标,但是我没有看到如何将它绑定到Android项目中。
假设您的依赖项目必须以两种方式构建纯Java源:
应如何解决这个问题?
由于我是Android Studio和Gradle的新手,我不清楚如何操纵Android插件生成的扩展,这些扩展在项目评估之后才可用。
如何使Android项目依赖于这个纯Java项目?
答案 0 :(得分:1)
如果不是因为您需要调试和发布库的版本,那么您的Android应用程序可能依赖于普通的Java模块 - 您可以使用java
设置库插件并在应用的compile project
中添加dependencies
语句,它会正常工作。
但是,Java插件永远不会理解Android的构建类型概念(除非GradleWare在某些时候添加它),因此您无法将其传播到Java模块。您可以将普通Java项目设置为Android库并使用android-library
插件(您必须将清单和其他特定于Android的内容假设在Android库中看到),但是你会遇到另一个问题:https://code.google.com/p/android/issues/detail?id=52962是一个错误,报告构建类型没有传播到库模块。
在修复bug之前,或者如果你不愿意将你的普通Java库变成一个android库,我认为你唯一的方法就是创建两个不同版本的库,将它们编译成不同的jar文件,然后选择性地拉出来在依赖中。
答案 1 :(得分:1)
这是我的答案,具有以下项目结构:
MyProject
-- MyAndroidLib
-- JarProject
这代表了gradle top项目'MyProject',它有一个子项目'MyAndroidLib',它依赖于一个纯java项目'JarProject',它使用不同的代码进行调试而不是发布版本。
我会利用Android的'debugCompile'和 'releaseCompile'配置。在依赖于jar的Android子项目('MyAndroidLib')中,将以下行添加到依赖项中:
//MyAndroidLib build.gradle
def jarProject = project(':MyProject:MyAndroidLib:JarProject')
def jarPath = pcfProject.projectDir.toString()
dependencies {
....
compile jarProject
debugCompile files(jarPath + '/' + jarProject.debugJarName)
releaseCompile files(jarPath + '/' + jarProject.releaseJarName)
}
定义'jarProject'def以简化从MyAndroidLib项目访问它。 (如果你知道更好的方法......)
这一点的主要目的是为'debugCompile'和'releaseCompile'配置定义一个单独的调试和释放jar路径。 'debugJarName'和'releaseJarName'在JarProject的gradle.properties文件中定义如下:
//JarProject gradle.properties
debugJarName=jarproject_d.jar
releaseJarName=jarproject_r.jar
在JarProject的gradle文件中,定义一个构建由此属性文件命名的BOTH jar文件的任务。在我的例子中,它们是在项目文件夹中由位于该项目中的ant构建文件的“compile”目标构建的。
//JarProject build.gradle
apply plugin: 'java'
project.ext.set("debugJar", file(projectDir.toString() + "/" + debugJarName))
project.ext.set("releaseJar",file(projectDir.toString() + "/" + releaseJarName))
task buildJars(type: Exec) {
description 'Build the debug and release jars for the JarProject'
outputs.files debugJar,releaseJar
commandLine 'ant', 'compile'
}
task compileJava.dependsOn('buildJars')
artifacts {
buildJars
}
clean.dependsOn('cleanBuildJars')
clean << {
exec {
commandLine 'ant', 'clean'
}
}
我利用了'java'插件,因为它定义了一个'compile'接口,我还没有弄清楚如何从头开始构建它,甚至是'base'插件。该项目利用了自动创建的“cleanBuildJars”任务,因为我在“buildJars”任务中定义了输出。这是必要的,以便根据需要构建它们。我可能也需要定义'输入',因为如果它们改变了......
如果有人看到我在gradle / Android世界中的第一个障碍如何得到改善,请等一下。根据需要添加评论。