Android Studio w / gradle:包r不存在

时间:2013-08-20 17:40:15

标签: java android gradle android-studio

最终修改:

这是一个很长的问题,有几个编辑,我不一定在每一步都做正确的事情。对于任何偶然发现此问题并且无法在Android Studio中将项目转换为gradle的人,我建议您查看this repository中提到的question # 16718026并尝试导入并编译并运行它。一旦你有了工作,就可以更容易地看到自己项目可能出现的问题。

总结一下,以下是我使用Android Studio .2.5将非Gradle Android Studio项目转换为正在使用的Gradle项目所做的工作,它为我自动安装了Gradle 1.6和Gradle Plugin .5。 / p>

(1)创建了一个带有图标和活动的新空白Android Studio项目。注意:我一开始并没有意识到这一点,因为我同时学习Android和Gradle,但Android Studio(无论如何在这个版本中)实际上为您设置了多项目设置,这对我来说很困惑。多项目意味着层次结构中项目上方的另一个文件夹,提供存储所有项目设置的位置。虽然有一个视频指南指出它,但在子项目文件夹(在我的情况下,FrontlineSMS)中创建了一个build.gradle文件。所以我必须创建该子项目build.gradle文件,并创建一个非常简单的settings.gradle(参见下面的 Update 2 。)

(2)将src /,res /,。git /,lib /,。gitignore和AndroidManifest.xml复制到新项目的根目录。

(3)根据Gradle Plugin用户指南中的约定,使用git mv将这些项目移动到适当的位置,在必要时替换或删除空白项目中的一些现有文件或文件夹。

(4)在我的子项目文件夹中创建了一个build.gradle并给它一些基本设置(见下文或上面链接的问题)

(5)按照 Update 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网站上的教学视频说它会这样做。

在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为我设置了一个多项目设置,而我还没有输入所有设置,即我没有创建设置。 gradle文件。

更新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安装!

更新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版本是否捆绑在一起?如果是这样,我想要什么,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插件的已知问题中建议。

3 个答案:

答案 0 :(得分:2)

您似乎缺少项目根目录中的settings.gradle文件。

您将需要settings.gradle文件来访问源仓库中的子项目。

导入项目时,请务必选择Gradle作为源!

答案 1 :(得分:1)

实际上有几点:

转到档案 - >设置 - > gradle并浏览到:

选择使用本地gradle分发并浏览到:

C:\用户\ .gradle /包装/ dists中/ gradle这个-1.6滨/ 72srdo3a5eb3bic159kar72vok / gradle这个-1.6

这很有效,但你必须通过以下方式清除所有以前的东西:

档案 - >无效的缓存/重启

然后你应该重新进入,它会重新导入(如果以上不完全正确,可能会提示你再次配置gradle)

现在它应该可以工作......你不必手动构建build.gradle文件。

顶层项目下的settings.gradle实际上。

最后,如果项目结构没有显示很多(我的只展示了平台设置,并且没有在大多数指南中进行所有其他选择),您可以右键单击顶级项目,例如HelloWorldProject,然后选择Module设置,这可能会让你到达你需要的地方。

上面的一些截图可能会有所帮助 - 看起来他们正在改变布局等并隐藏东西,所以官方指南并不总是正确的:

Lame不能发布你的图片......

答案 2 :(得分:0)

样本(包含多模块项目和多库项目)压缩。

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的0.2之前升级Android Studio,通常会发生这种情况。安装新的Android工作室,它应该工作。与支持库相同的故事。