最终编辑:
这是一个很长的问题,需要进行多次编辑,而我不一定在每个步骤中都做对了。对于在此问题上迷迷糊糊而又无法在Android Studio中将项目转换为gradle的任何人,我建议您查看this repository中提到的question # 16718026并尝试将其导入并编译并运行它。一旦工作了,就很容易发现自己的项目可能出了什么问题。
总而言之,这就是我使用Android Studio .2.5将非Gradle Android Studio项目转换为可正常工作的Gradle项目的方法,该项目会自动为我安装Gradle 1.6和Gradle插件.5。
(1)创建一个带有图标和 Activity 的新的空白Android Studio项目。注意:起初我并没有意识到这一点,因为我同时学习Android和Gradle,但是Android Studio(无论如何在此版本中)实际上为您设置了多项目设置,这让我感到困惑。多项目意味着在项目中层次结构中还有一个文件夹,为所有项目提供了存储设置的位置。尽管有视频指南指出,AS仍未在子项目文件夹(在我的情况下为FrontlineSMS)中创建build.gradle文件。因此,我必须创建该子项目的build.gradle文件,并创建一个非常简单的settings.gradle(请参见下面的更新2 。)
(2)将src /,res / 、. git /,lib / 、. gitignore和AndroidManifest.xml复制到新项目的根目录。
(3)根据Gradle插件用户指南的约定,使用git mv
将这些项目移动到适当的位置,必要时替换或删除空白项目中的某些现有文件或文件夹。
(4)在我的子项目文件夹中创建了一个build.gradle
并为其提供了一些基本设置(请参见下文或上面链接的问题)
(5)按照更新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 /文件夹并将其标记为源,但这没有用。而且,重建项目只会给我同样的错误。
我的root 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)
除了我之前的问题,我还很感谢您可以提供有关该项目的结构方式的任何提示。这并不意味着是一个多项目设置。谢谢你的帮助。
更新1
我能够从命令行生成APK。我的主要问题是我从错误的目录中调用了
gradle clean
。从FrontlineSMS调用它起作用。我猜测当我只有一个项目时,Android Studio会为我设置多项目设置,而我没有为此输入所有设置,即,我还没有创建settings.gradle文件。更新2
创建了以下settings.gradle文件,该文件使我可以从根目录(settings.gradle所在的位置)运行
gradle clean && gradle build
: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时安装的版本项目!
更新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
,生成apks。因此,它似乎可以从命令行运行,但是我也希望它可以从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版本是否绑定(bind)在一起?如果是这样,我想要gradle插件.4 + gradle 1.6还是gradle插件.5和gradle 1.7?以及如何正确安装这些?
更新4
我最终通过命令行和IDE进行编译。诀窍是在创建基本Gradle文件后使用Gradle导入项目。谢谢伊桑!在“导入项目”过程中,您将选择“从现有资源创建项目”或“从外部模型导入项目”。当我应该选择前者并选择Gradle时,我一直在选择前者。之后,我选择“使用gradle-wrapper(推荐)”并选中“使用自动导入”,然后单击“完成”。它警告了我一些必须更改的事情,例如使用最新的gradle插件,为此我在
build.gradle
文件中进行了更改,classpath 'com.android.tools.build:gradle:0.5.+'
这在android gradle插件的已知问题中建议。
最佳答案
看来您从项目根目录中丢失了settings.gradle文件。
您将需要settings.gradle文件来访问位于源存储库中的子项目。
导入项目时,请确保选择Gradle作为源!