如何使用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议,这是我尝试过的。
- 创build一个名为
MyApp
的新项目 - 单击
File > New Module
,selectAndroid 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" >
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
添加依赖关系似乎对错误没有任何影响。 从上面继续
- 单击
File > Project Structure > Modules > MyApp-MyApp
- 切换到
Dependencies
选项卡 - 点击
+ > Module Dependency
并selectMyLib
- 单击
Apply
并OK
- 点击
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为了解决这个问题。
- 将
compile project(':SubProjects:MyLib')
到MyLib/build.gradle
- 从
MyLib/build.gradle
删除compile files('libs/android-support-v4.jar')
- 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') }
资料来源:
我刚刚有一个非常类似的问题与gradle构build/添加.jar库。 我通过以下方式组合工作:
- 将libs文件夹移动到项目的根目录(与'src'相同的目录),并在finder中将该库添加到此文件夹中(使用Mac OS X)
- 在Android Studio中,右键单击要添加为库的文件夹
- 编辑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
指向ndkBuild
path参数,或将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正在转向叮当声。
- 渲染问题在渲染过程中引发exception:com.android.ide.common.rendering.api.LayoutlibCallback
- 如何使Android Studio下载依赖关系源代码和javadoc?
- Windows 7上的Android Studio安装失败,找不到JDK
- SDK位置未findAndroid Studio + Gradle
- Android Studio中构build和构build的区别
- 用Android Studio安装ActionbarSherlock?
- 如何自动更新Android Studio?
- 你如何在Eclipse中打开一个Android Studio项目?
- 在Android Studio中添加“未实现的方法”function