最终编辑:
这是一个很长的问题,需要进行多次编辑,而且我不一定在每一步都做正确的事情。对于任何偶然发现这个问题并且在 Android Studio 中将项目转换为 gradle 时遇到困难的人,我建议检查一下这个存储库中提到的问题#16718026并尝试导入它并编译并运行它。一旦你有了一些东西,你就可以更容易地看到你自己的项目可能存在什么问题。
总而言之,以下是我使用 Android Studio .2.5 将非 Gradle Android Studio 项目转换为工作 Gradle 项目所做的工作,它为我自动安装了 Gradle 1.6 和 Gradle Plugin .5。
(1) 创建一个新的空白 Android Studio 项目,其中包含图标和活动。注意:我一开始并没有意识到这一点,因为我同时学习 Android 和 Gradle,但是 Android Studio(无论如何在这个版本中)实际上为您设置了多项目设置,这让我感到困惑。多项目意味着层次结构中项目上方还有另一个文件夹,提供了存储所有项目设置的位置。 AS 做到了not在子项目文件夹中创建一个 build.gradle 文件(在我的例子中,FrontlineSMS),尽管视频指南表明它会这样做。所以我必须创建该子项目 build.gradle 文件,并创建一个非常简单的 settings.gradle (请参阅Update 2 below.)
(2) 将 src/、res/、.git/、lib/、.gitignore 和 AndroidManifest.xml 复制到新项目的根目录。
(3) 使用过的git mv
根据 Gradle 插件用户指南中的约定将这些项目移动到适当的位置,必要时替换或删除空白项目中的一些现有文件或文件夹。
(4)创建了一个build.gradle
在我的子项目文件夹中,并给它一些基本设置(见下文或上面链接的问题)
(5) 按照中所述导入项目Update 4
原问题:
我是一名新手 Android 开发人员,试图将当前不使用 Gradle(并且编译和运行得很好)的 Android Studio 项目转换为在 OS X 上使用 Gradle 的项目。我陷入了资源错误,我认为这可能是与我的项目结构、IDE 中的设置、build.gradle 文件中的设置或这些的某些组合有关。
我进行转换的方法是首先在 Android Studio 中创建一个新项目,将文件复制到适当的位置,然后在 IDE 和 build.gradle 文件中添加一些设置。我的项目结构是,
├── frontlinesms-for-android
├── build.gradle
├── gradle
├── gradlew
├── gradle.bat
├── settings.gradle (added in update 2)
├── local.properties
├── lib
└── lib1.jar
└── lib2.jar
└── ...
├── frontlinesms-for-android.iml
├── FrontlineSMS
└── build.gradle
└── src
├── main
│ └── res
│ └── AndroidManifest.xml
│ └── java
│ └── net
│ └── frontlinesms
│ └── android
│ ├── FrontlineSMS.java
│ ├── ...
最值得注意的是,也许我将 res/ 文件夹与 java/ 和 AndroidManifest.xml 放在同一级别。我尝试遵循 Gradle 插件用户指南中提到的约定,这样我就不必在 build.gradle 文件中进行太多自定义。
我还将文件夹 FrontlineSMS/src/main/java/net 标记为源,因为如果我不这样做,则不会尝试编译。我在 FrontlineSMS/build.gradle 中创建了一个新的 build.gradle 文件,因为当我创建新项目时它不存在,尽管 Gradle 网站上的教学视频说它存在。
在 IDE 中,我还设置了 /lib 中的外部库的依赖关系。
当我尝试通过 IDE 编译时,我得到了很多Package r does not exist
错误,表明自动生成的 R 类未生成或识别。这在项目中定义为,
import net.frontlinesms.android.R;
在几个文件中。我该怎么做才能让 Android Studio / Gradle 识别我在 src/main/res 下定义的资源?
阅读其他人的问题,我注意到此错误的一些解决方案涉及将“gen/”文件夹标记为源根目录或“清理”项目。我尝试在根目录中创建一个 gen/ 文件夹并将其标记为源,但这不起作用。而且,重建项目只会给我带来同样的错误。
我的根 build.gradle 文件具有以下内容,
dependencies {
compile project(':FrontlineSMS')
}
FrontlineSMS/build.gradle 下的那个有,
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile file('../lib/acra-3.1.1.jar')
compile file('../lib/activation.jar')
compile file('../lib/additionnal.jar')
compile file('../lib/annotations.jar')
compile file('../lib/libGoogleAnalytics.jar')
compile file('../lib/mail.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
当我尝试使用命令行构建时./gradlew clean
我收到此错误,
(removed error)
除了我之前的问题之外,如果您能提供有关如何构建该项目的任何建议,我将不胜感激。这并不意味着是一个多项目设置。感谢您的帮助。
Update 1
我能够从命令行生成 APK。我的主要问题是我正在打电话gradle clean
来自错误的目录。从 FrontlineSMS 调用它成功了。我猜当我只有一个项目时,Android Studio 为我设置了多项目设置,并且我没有输入该项目的所有设置,即我没有创建 settings.gradle 文件。
Update 2
创建了以下 settings.gradle 文件,它允许我运行gradle clean && gradle build
从根目录(settings.gradle 所在的位置):
include ':FrontlineSMS'
注意:我这里使用的gradle版本是homebrew安装的1.6。如果我使用已安装的 gradlew 包装器,它会说,
Gradle version 1.6 is required. Current version is 1.7
在网上搜索此错误似乎表明 Android 目前不支持 1.7,仅支持 1.6(也许它总是落后一两个版本),但这是我创建新版本时 Android Studio 安装的版本项目!
Update 3(编辑:这基本上都是错误的,不要遵循这个)
尝试从 Android Studio 构建项目会产生与上面关于需要 1.6 版本相同的错误。我尝试重新导入该项目,尽管它说找不到任何源文件。我想这意味着(1)我的 gradle 版本错误,需要修复它,也许(2)我毕竟需要在 build.gradle 文件中定义源文件,即使我认为我遵循的是指南中的约定。
我尝试复制gradle-wrapper-1.6.jar
取代gradle/wrapper/gradle-wrapper.jar
但是当我通过运行它时,这只是给出了类或方法未找到错误./gradlew clean
.
尝试的解决方案:在gradle/wrapper/gradle-wrapper.properties
有一条线distributionUrl=
我将其更改为指向 1.6 版本,
distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip
然后下次我跑的时候./gradlew clean
它将新版本的 gradle 下载到我的主目录中~/.gradle
(到目前为止我还没有意识到存在)现在当我打字时./gradlew --version
它说它是在 1.6 上,一切都是通过命令行构建的./gradlew clean && ./gradlew build
,生成 apk。所以它似乎可以从命令行工作,但我也希望它可以从 IDE 工作
现在 IDE 中显示
Project is using an old version of the Android Gradle plug-in. The minimum supported version is 0.5.0
所以我更新了build.gradle
文件说
classpath 'com.android.tools.build:gradle:0.5'
然后重新打开 IDE,它告诉我,
Could not find com.android.tools.build:gradle:0.5.
Android Studio gradle 插件和 gradle 版本是否绑定在一起?如果是这样,我想要什么,gradle 插件 .4 + gradle 1.6 还是 gradle 插件 .5 和 gradle 1.7?我该如何正确安装这些?
Update 4
我终于通过命令行编译了这个andIDE。诀窍是在创建基本 Gradle 文件后使用 Gradle 导入项目。谢谢伊森!在导入项目过程中,您可以选择“从现有源创建项目”或“从外部模型导入项目”。当我应该选择后者并选择 Gradle 时,我一直选择前者。之后,我选择“使用 gradle-wrapper(推荐)”并选中“使用自动导入”并单击“完成”。它警告我一些必须更改的事情,例如使用最新的 gradle 插件,为此我在我的build.gradle
file,
classpath 'com.android.tools.build:gradle:0.5.+'
这是在 android gradle 插件的已知问题中建议的。