Android Studio w / gradle:包r不存在
最终编辑:
这是一个很长的问题,有几个编辑,我不一定在每一步都做正确的事情。 对于那些偶然发现这个问题并且在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没有在子项目文件夹(在我的情况下,FrontlineSMS)中创建build.gradle文件,尽管video指南指出它会。 所以我必须创建该子项目build.gradle文件,并创建一个非常简单的settings.gradle(参见下面的更新2 )。
(2)将src /,res /,.git /,lib /,。gitignore和AndroidManifest.xml复制到新项目的根目录。
(3)使用git mv
根据Gradle Plugin用户指南中的约定将这些项目移动到适当的位置,在必要时替换或删除空白项目中的一些现有文件或文件夹。
(4)在我的子项目文件夹中创建了一个build.gradle
并给它一些基本设置(参见下面或上面链接的问题)
(5)按照更新4中的描述导入项目
原始问题:
我是一个新手Android开发人员,试图将当前不使用Gradle(并编译并运行得很好)的Android Studio项目转换为在OS X上使用Gradle的Android项目。我遇到资源错误,我认为可能与我的项目结构,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网站上的教学video说它会这样做。
在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
运行它时, ./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版本是否捆绑在一起? 如果是这样我想要什么,gradle插件.4 + gradle 1.6或gradle插件.5和gradle 1.7? 我该如何正确安装这些?
更新4
我终于通过命令行和 IDE编译了这个。 诀窍是在创建基本Gradle文件后使用Gradle导入项目。 谢谢Ethan! 在导入项目过程中,您可以选择“从现有源创建项目”或“从外部模型导入项目”。 当我选择后者并选择Gradle时,我一直在选择前者。 之后我选择“使用gradle-wrapper(推荐)”并选中“使用自动导入”并单击“完成”。 它警告我一些我必须改变的事情,例如使用最新的gradle插件,我在build.gradle
文件中对此进行了更改,
classpath 'com.android.tools.build:gradle:0.5.+'
这是在android gradle插件的已知问题中提出的。
您似乎缺少项目根目录中的settings.gradle文件。
您将需要settings.gradle文件来访问源库中的子项目。
导入项目时,请务必选择Gradle作为源!
实际上有几点:
转到文件 – >设置 – > gradle并浏览到:
选择使用本地gradle分发并浏览到:
C:\用户\ .gradle /包装/ dists中/ gradle这个-1.6滨/ 72srdo3a5eb3bic159kar72vok / gradle这个-1.6
这有效,但你必须通过以下方式清除所有以前的东西:
文件 – >无效缓存/重启
然后你应该回来,它将重新导入(可能会提示你再次配置gradle,如果以上不完全正确我认为)
现在它应该工作…您不必手动构建build.gradle文件。
实际上顶层项目下的settings.gradle。
最后,如果项目结构没有显示太多(我只展示了平台设置,并且没有在大多数指南中进行所有其他选择),您可以右键单击顶级项目,例如HelloWorldProject,然后选择Module Settings and this可能会让你到达你需要的地方。
上面的一些截图可能会有所帮助 – 看起来他们正在改变布局等并隐藏东西,所以官方指南并不总是正确的:
Lame不能发布你的图片……
拉链样本(包含多模块项目和多库项目)。
http://tools.android.com/tech-docs/new-build-system/
滚动到底部。
关于
Could not find com.android.tools.build:gradle:0.5.
这个jar不是maven中心,它附带Android Studio 0.2。+如果你从没有内部m2 repo的pre 0.2升级Android Studio,通常会发生这种情况。 安装新的Android工作室,它应该工作。 与支持库相同的故事。