我正在尝试从Eclipse迁移项目,但是没有尝试过。在Eclipse中,我有3个项目(2个android应用程序项目和1个android库项目)。2个应用程序项目取决于库项目。当我执行gradle导出时,我得到3个无效的项目。我愿意对项目进行重组,但没有找到有关如何完成此工作的任何文档。
有没有办法使Eclipse导出的3个项目一起工作?我最好重新组织一下工作,如果可以的话,是否应该提供有关如何完成此工作的文档?
更新资料
我已将整个项目上传到GitHub https://github.com/respectTheCode/android-studio-library-example
更新1
根据Padma Kumar的建议,这就是我尝试过的方法。
MyApp
File > New Module
,选择Android Library
并命名MyLib
Build > Make Project
Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.
然后,我package在清单中添加了一个属性
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
构建后出现此错误
Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist
添加依赖性似乎对该错误没有任何影响。从上面继续
File > Project Structure > Modules > MyApp-MyApp
Dependencies
标签页+ > Module Dependency
选择MyLib
Apply
并OK
Build > Make Project
更新2
根据伊桑(Ethan)的建议,我们可以从这里得到
2个子项目build.gradle似乎具有所有正确的部分,唯一的区别是插件行在下面MyApp/build.gradle。
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile files('libs/android-support-v4.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
根项目build.gradle是空的,所以我像这样添加了两个项目
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
我现在在构建时出现此错误
Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
更新3
非常感谢Ethan解决了这个问题。
添加compile project(':SubProjects:MyLib')
到MyLib/build.gradle compile files('libs/android-support-v4.jar')
从中删除MyLib/build.gradle
关闭项目并从gradle导入根项目
更新4
从0.1.2版开始,您现在可以compile "com.android.support:support-v4:13.0.0"
代替compile files('libs/android-support-v4.jar')
。由于它来自mavin,因此您可以毫无问题地将其包含在多个项目中。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'android'
dependencies {
compile "com.android.support:support-v4:13.0.0"
compile project(':SubProjects:MyLib')
}
更新5
从0.1.3开始,工具栏中现在有一个“同步项目”按钮。您可以单击该.gradle文件,而不是在更改文件后重新导入您的项目。
注意:此答案是纯Gradle答案,我定期在IntelliJ中使用此答案,但我不知道与Android Studio的集成方式。我相信自己会发生什么,所以这就是我使用Gradle和Android的方式。
TL; DR完整示例-https://github.com/ethankhall/driving-time-tracker/
免责声明:这是我正在/正在从事的项目。
Gradle具有定义的结构(您可以更改,底部的链接告诉您如何),如果您曾经使用过,则它与Maven非常相似。
Project Root
+-- src
| +-- main (your project)
| | +-- java (where your java code goes)
| | +-- res (where your res go)
| | +-- assets (where your assets go)
| | \-- AndroidManifest.xml
| \-- instrumentTest (test project)
| \-- java (where your java code goes)
+-- build.gradle
\-- settings.gradle
如果只有一个项目,则不需要settings.gradle文件。但是,您要添加更多项目,因此我们需要它。
现在,让我们看一下该build.gradle文件。您将需要它(添加android工具)
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.3'
}
}
现在,我们需要告诉Gradle一些Android部件。很简单 一个基本的(适用于我的大多数情况)如下所示。我在此区块中有一条评论,它将使我在生成APK时指定版本名称和代码。
build.gradle
apply plugin: "android"
android {
compileSdkVersion 17
/*
defaultConfig {
versionCode = 1
versionName = "0.0.0"
}
*/
}
我们将要添加的东西,以帮助那些尚未了解Gradle的人,让他们无需安装即可使用该项目。
build.gradle
task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
gradleVersion = '1.4'
}
因此,现在我们要构建一个项目。现在,我们将添加其他。我将它们放在目录中,也许称为deps或subProjects。其实并不重要,但是您需要知道它放在哪里。要告诉Gradle项目在哪里,您需要将它们添加到settings.gradle中。
目录结构:
Project Root
+-- src (see above)
+-- subProjects (where projects are held)
| +-- reallyCoolProject1 (your first included project)
| \-- See project structure for a normal app
| \-- reallyCoolProject2 (your second included project)
| \-- See project structure for a normal app
+-- build.gradle
\-- settings.gradle
settings.gradle:
include ':subProjects:reallyCoolProject1'
include ':subProjects:reallyCoolProject2'
你应该确保的最后一件事是子项目/ reallyCoolProject1 /
的build.gradle
具有apply plugin: "android-library"
代替apply plugin: "android"
。
像每个Gradle项目(和Maven)一样,我们现在需要告诉根项目有关它的依赖关系。这还可以包括所需的任何常规Java依赖项。
build.gradle
dependencies{
compile 'com.fasterxml.jackson.core:jackson-core:2.1.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.1.4'
compile project(":subProjects:reallyCoolProject1")
compile project(':subProjects:reallyCoolProject2')
}
我知道这似乎有很多步骤,但是一旦执行一次或两次,它们就非常容易。假设您已在其中安装了Android SDK,这种方法也将允许您在CI服务器上进行构建。
NDK旁注:如果要使用NDK,则需要类似以下内容。示例build.gradle文件可以在这里找到:https ://gist.github.com/khernyo/4226923
build.gradle
task copyNativeLibs(type: Copy) {
from fileTree(dir: 'libs', include: '**/*.so' ) into 'build/native-libs'
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniDir new File('build/native-libs')
}
我已经将整个项目上传到了GitHub https://GitHub.com/respectthecode/android-studio-library-example 更新1 根据帕德玛·库马尔的建议,这就是我所尝试的。 null 在构建之后,我得到了这个错误 添加依赖项似乎不会对错误产生任何影响。从上面继续 单击 切换到选项卡 单击并选择 单击和 单击 根据伊森的建议,这就是我们得到的 2个子项
我尝试使用gradle构建工具构建一个简单的android应用程序。但是我得到了这样的错误 方法无签名:org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.compile()适用于参数类型:(java.lang.String)值:[org.gradle.api.plugins: gradle and
问题内容: 我正在使用gradle构建的开源项目。我想生成一个(project)-sources.jar文件,可以将其加载到我的IDE(IntelliJ IDEA)中并通过该项目进行调试。我知道如何生成文件(如果可以生成的话)。 我浏览了该项目可用的gradle任务,但没有一个可以生成source jar文件。 为该项目生成源jar文件的最简单方法是什么? 将源添加到包含已编译的类文件的jar文件
我试图在Eclipse的Java中构建一个Apache Spark应用程序。我使用Gradle作为我的构建管理系统。我应该在中写什么?我应该使用哪些gradle命令来做这个Maven POM和终端命令所做的同样的事情? 和
我正在使用Gradle作为其构建系统的Android应用程序。 我的目标是使用一个值(包名)作为: 还可以通过公开它,以便Java代码可以访问它。 此访问必须来自flavor之外(即,应用程序的免费版本需要知道付费版本的软件包名称,以便能够提示用户在Play store中升级)。 所以我想这样做: 只是我不知道如何定义,使其在整个构建中可见。格雷德尔并没有破坏剧本。 因为有几种不同的口味,如果我能
问题内容: 我正在尝试使用Gradle命令行界面构建我的Android应用。我还将 GRADLE_HOME / bin 添加到环境中。首先,我使用gradle init生成了包装,gradlew在我的项目文件夹中。现在,当我使用此包装程序构建我的应用程序( ./gradlew build )或使用其任何功能时,它尝试下载gradle-2.3.zip文件并失败(以下错误消息)。我不明白的是为什么gr