res*_*ode 143 android gradle android-studio
我正在尝试从Eclipse迁移项目,但我尝试过的任何工作都没有.在Eclipse中我有3个项目(2个Android应用程序项目和1个android库项目).2个app项目取决于库项目.当我进行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.
Run Code Online (Sandbox Code Playgroud)
然后我package
在清单中添加了一个属性
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
Run Code Online (Sandbox Code Playgroud)
建成后我得到了这个错误
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
Run Code Online (Sandbox Code Playgroud)
添加依赖项似乎不会对错误产生任何影响.从上面继续
File > Project Structure > Modules > MyApp-MyApp
Dependencies
Tab+ > 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
}
}
Run Code Online (Sandbox Code Playgroud)
根项目build.gradle
是空的,所以我添加了这样的两个项目
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
Run Code Online (Sandbox Code Playgroud)
我现在在构建时遇到此错误
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.
Run Code Online (Sandbox Code Playgroud)
更新3
非常感谢Ethan解决这个问题.
compile project(':SubProjects:MyLib')
到MyLib/build.gradle
compile files('libs/android-support-v4.jar')
从中删除MyLib/build.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')
}
Run Code Online (Sandbox Code Playgroud)
更新5
从0.1.3开始,工具栏中现在有一个"同步项目"按钮.您可以在更改.gradle
文件后单击该项而不是重新导入项目.
Eth*_*han 115
注意:这个答案是一个纯粹的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
Run Code Online (Sandbox Code Playgroud)
如果您只有一个项目,则不需要settings.gradle文件.但是,您想要添加更多项目,因此我们需要它.
现在让我们来看看build.gradle文件.你将需要它(添加Android工具)
的build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.3'
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们需要告诉Gradle一些Android部分.这很简单.一个基本的(在我的大多数情况下都有效)如下所示.我在这个块中有一个注释,它允许我在生成APK时指定版本名称和代码.
的build.gradle
apply plugin: "android"
android {
compileSdkVersion 17
/*
defaultConfig {
versionCode = 1
versionName = "0.0.0"
}
*/
}
Run Code Online (Sandbox Code Playgroud)
我们想要添加的东西,帮助那些还没有看到Gradle之光的人,一种让他们在不安装项目的情况下使用项目的方法.
的build.gradle
task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) {
gradleVersion = '1.4'
}
Run Code Online (Sandbox Code Playgroud)
所以现在我们有一个项目需要建立.现在我们要添加其他的.我把它们放在一个目录中,也许称之为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
Run Code Online (Sandbox Code Playgroud)
settings.gradle:
include ':subProjects:reallyCoolProject1'
include ':subProjects:reallyCoolProject2'
Run Code Online (Sandbox Code Playgroud)
你应该确保的最后一件事是子项目/ 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')
}
Run Code Online (Sandbox Code Playgroud)
我知道这似乎有很多步骤,但一旦你做了一两次它们就很容易了.这种方式还允许您在CI服务器上构建,假设您安装了Android SDK.
NDK Side注意:如果您打算使用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')
}
Run Code Online (Sandbox Code Playgroud)
资料来源:
我只是在gradle构建/添加.jar库时遇到了类似的问题.我通过以下组合使其工作:
compile fileTree(dir: 'libs', include: '*.jar')}
但是更重要和恼人的是,在我开始工作几个小时后,Android Studio刚刚发布了0.3.7,声称已经解决了很多问题,比如添加.jar库
http://tools.android.com/recent
希望这有助于人们!
归档时间: |
|
查看次数: |
170710 次 |
最近记录: |