【问题标题】:Android Studio w/gradle: Package r does not existAndroid Studio w/gradle:包 r 不存在
【发布时间】:2013-08-20 17:40:15
【问题描述】:

最终编辑:

这是一个很长的问题,需要经过多次修改,而且我不一定在每一步都做正确的事情。对于偶然发现这个问题并且在将项目转换为 Android Studio 中的 gradle 时遇到问题的任何人,我建议查看question # 16718026 中提到的this repository 并尝试导入并编译和运行它。一旦你有一些工作,就更容易看出你自己的项目可能出了什么问题。

总而言之,这是我使用 Android Studio .2.5 将非 Gradle Android Studio 项目转换为工作 Gradle 项目所做的工作,它为我自动安装了 Gradle 1.6 和 Gradle Plugin .5。

(1) 创建了一个带有图标和活动的新空白 Android Studio 项目。注意:一开始我没有意识到这一点,因为我同时学习 Android 和 Gradle,但 Android Studio(无论如何都在这个版本中)实际上为您设置了多项目设置,这让我感到困惑。多项目意味着在层次结构中您的项目上方还有另一个文件夹,为存储所有项目的设置提供了一个位置。 AS not 在子项目文件夹(在我的例子中是 FrontlineSMS)中创建了 build.gradle 文件,尽管视频指南表明它会这样做。所以我必须创建那个子项目 build.gradle 文件并创建一个非常简单的 settings.gradle(请参阅下面的 Update 2。)

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

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

(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/ 文件夹并将其标记为源,但这不起作用。而且,重建项目只会给我同样的错误。

我的根 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 安装时安装的版本创建了一个新项目!

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 的命令行构建,从而生成 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 plugin .4 + gradle 1.6 或 gradle plugin .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 文件吗?

标签: java android gradle android-studio


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    其实有几点:

    转到文件 -> 设置 -> gradle 并浏览到:

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

    c:\users\.gradle/wrapper/dists/gradle-1.6-bin/72srdo3a5eb3bic159kar72vok/gradle-1.6

    这可行,但你必须清除所有以前的东西,方法是:

    文件 -> 使缓存无效/重新启动

    然后你应该回来,它会重新导入(如果我认为上述不完全正确,可能会提示你再次配置 gradle)

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

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

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

    上面的一些屏幕截图可能会有所帮助 - 看起来他们正在更改布局等并隐藏内容,因此官方指南并不总是正确的:

    Lame 不能给你发图片...

    【讨论】:

      【解决方案3】:

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

      http://tools.android.com/tech-docs/new-build-system/

      滚动到底部。

      关于

      Could not find com.android.tools.build:gradle:0.5.
      

      这个 jar 不在 maven central 中,它带有 Android Studio 0.2.+ 如果您从没有内部 m2 存储库的 pre 0.2 升级 Android Studio,通常会发生这种情况。安装新的 Android Studio,它应该可以工作。支持库也是如此。

      【讨论】:

        猜你喜欢
        • 2013-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        相关资源
        最近更新 更多