如何使用Android Studio和gradle构buildAndroid库?

我正在尝试从Eclipse迁移项目,但没有尝试过。 在Eclipse中,我有3个项目(2个Android应用程序项目和1个Android库项目)。 这两个应用程序项目取决于图书馆项目。 当我执行gradle导出时,我得到3个不起作用的项目。 我愿意重组这个项目,但还没有find任何有关如何完成这个任务的文档。

有没有办法让Eclipse导出的3个项目一起工作? 我是否更好地进行重组,如果是的话,应该怎样做文件?

更新

我已经把整个项目上传到GitHub https://github.com/respectTheCode/android-studio-library-example

更新1

根据Padma Kumar的build议,这是我尝试过的。

  1. 创build一个名为MyApp的新项目
  2. 单击File > New Module ,selectAndroid Library并将其命名为MyLib
  3. 点击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" > 

build立后,我得到这个错误

 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 

添加依赖关系似乎对错误没有任何影响。 从上面继续

  1. 单击File > Project Structure > Modules > MyApp-MyApp
  2. 切换到Dependencies选项卡
  3. 点击+ > Module Dependency并selectMyLib
  4. 单击ApplyOK
  5. 点击Build > Make Project

更新2

根据Ethan的build议,这是我们得到的地方

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") } 

我现在得到这个错误时build立

 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为了解决这个问题。

  1. compile project(':SubProjects:MyLib')MyLib/build.gradle
  2. MyLib/build.gradle删除compile files('libs/android-support-v4.jar')
  3. closures项目并从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开始,工具栏中现在有一个“同步项目”button。 您可以单击该文件,而不是在更改.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' } 

所以现在我们有一个项目要build立。 现在我们要添加其他的。 我把它们放在一个目录中,也许叫它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' 

你应该确定的最后一件事是subProjects / 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') } 

我知道这似乎是很多步骤,但一旦你做了一次或两次,它们就非常容易了。 这种方式也可以让你build立一个CI服务器,假设你已经安装了Android SDK。

NDK侧注:如果你打算使用NDK,你将需要像下面的东西。 示例build.gradle文件可以在这里find: 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') } 

资料来源:

  1. http://tools.android.com/tech-docs/new-build-system/user-guide
  2. https://gist.github.com/khernyo/4226923
  3. https://github.com/ethankhall/driving-time-tracker/

我刚刚有一个非常类似的问题与gradle构build/添加.jar库。 我通过以下方式组合工作:

  1. 将libs文件夹移动到项目的根目录(与'src'相同的目录),并在finder中将该库添加到此文件夹中(使用Mac OS X)
  2. 在Android Studio中,右键单击要添加为库的文件夹
  3. 编辑build.gradle文件中的依赖项,添加compile fileTree(dir: 'libs', include: '*.jar')}

但更重要也更令人讨厌的是,仅仅几个小时后,Android Studio刚刚发布了0.3.7,声称已经解决了很多gradle问题,比如添加.jar库

http://tools.android.com/recent

希望这有助于人们!

这是我的mac用户解决scheme,我认为它也适用于窗口:

首先转到您的Android Studio工具栏

build立>build立项目(当你们在线让它来下载文件),然后

编译模块“你的应用程序名称显示在这里”(仍然在线让该文件
下载并完成)然后

运行你的应用程序,完成它将启动你的模拟器,并configuration它,然后运行它!

这就对了!!! 快乐的编码家伙!!!!!!!

Gradle Build Tools 2.2.0+ – 一切正常

这是做到这一点的正确方法

在试图避免实验性,坦率地厌倦了NDK及其所有的骇客,我很高兴2.2.x的Gradle构build工具出来,现在只是工作。 关键是externalNativeBuild并在Android.mk指向ndkBuildpath参数,或将ndkBuild更改为cmake ,并将path参数指向CMakeLists.txt构build脚本。

 android { compileSdkVersion 19 buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 19 targetSdkVersion 19 ndk { abiFilters 'armeabi', 'armeabi-v7a', 'x86' } externalNativeBuild { cmake { cppFlags '-std=c++11' arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_PLATFORM=android-19', '-DANDROID_STL=gnustl_static', '-DANDROID_ARM_NEON=TRUE', '-DANDROID_CPP_FEATURES=exceptions rtti' } } } externalNativeBuild { cmake { path 'src/main/jni/CMakeLists.txt' } //ndkBuild { // path 'src/main/jni/Android.mk' //} } } 

有关更多详细信息,请查看Google的关于添加本机代码的页面 。

这是正确的设置后,您可以./gradlew installDebug和你走了。 您还需要注意,由于现在在Android NDK中不推荐使用gcc,所以NDK正在转向叮当声。