当前位置: 首页 > 面试题库 >

带渐变的Android Studio:包r不存在

郭凡
2023-03-14
问题内容

最终编辑:

这是一个很长的问题,需要进行多次编辑,我不一定在每个步骤中都做对了。对于在此问题上迷迷糊糊而又无法在Android
Studio中将项目转换为gradle的任何人,我建议您查看问题编号16718026中提到的此存储库,并尝试导入并编译并运行它。一旦工作正常,就很容易发现自己的项目可能出了什么问题

总而言之,这就是我使用Android Studio .2.5将非Gradle Android
Studio项目转换为可正常工作的Gradle项目的方法,该项目会自动为我安装Gradle 1.6和Gradle插件.5。

(1)创建一个带有图标和活动的新的空白Android
Studio项目。注意:我一开始并没有意识到这一点,因为我同时学习Android和Gradle,但是Android
Studio(无论如何在此版本中)实际上为您设置了多项目设置,这令我感到困惑。多项目意味着在项目中层次结构中还有一个文件夹,它提供了一个位置来存储所有项目的设置。尽管有视频指南指出,AS
仍未
在子项目文件夹(在我的情况下为FrontlineSMS)中创建build.gradle文件。因此,我不得不创建一个子项目的build.gradle文件,并创建一个非常简单settings.gradle(见
更新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的项目。我陷入了Resource错误,我认为这可能是与我的项目结构,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文件,该文件允许我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,导致产生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?以及如何正确安装这些?

更新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作为源!



 类似资料:
  • 我得到了一个可怕的软件包,它根本不存在,简直要了我的命。代码很好,我在市场上有运行代码的应用程序。 现在它正在影响简单的应用程序。o.0 <代码>R.string。app_name是错误的my 。应该对应于R.java

  • 我正在尝试将checkstyle添加到我的中。 Checkstyle模板是的,可以从这里访问。

  • 问题内容: 真的没有办法使用CSS为渐变背景设置动画吗? 就像是: 我知道,对于Safari 5.1+和Chrome 10+,有一个新的渐变语法,但是现在,对于该项目,我必须坚持使用旧的语法。 问题答案: Webkit渐变尚不支持过渡。它已在规格中,但尚无法使用。 (ps,如果您仅执行颜色转换-您可能要签出-webkit-filters-可以进行动画处理!) 更新:渐变过渡显然可以在IE10 +中

  • 本文向大家介绍纯js和css实现渐变色包括静态渐变和动态渐变,包括了纯js和css实现渐变色包括静态渐变和动态渐变的使用技巧和注意事项,需要的朋友参考一下 说起“渐变色”,你会想起什么? 当我开始搜索查找这个名词的时候,才发现它实际上是有两种理解或者说是两种形式的:动态渐变和静态渐变。 所谓动态渐变,举个简单的例子:他来了,她的脸渐渐红了...渐渐的,渐渐改变的,是不断在改变的;而静态渐变,也就更

  • Another hard-to-write CSS3 feature is a gradient. You have to repeat long gradient definition multiple times with different vendor prefixes. Also, if you want to cover all gradient-supported browsers,

  • 使用渐变填充可以在要应用其他任何颜色时应用渐变颜色混和。创建渐变填色是在一个或多个对象间创建颜色平滑过渡的好方法。您可以将渐变存储为色板,从而便于将渐变应用于多个对象。 注:如果要创建颜色可以沿不同方向顺畅分布的单个多色对象,请使用网格对象。 要查看使用渐变来改进绘画的视频,请参阅 www.adobe.com/go/lrvid4017_ai_cn。有关创建渐变的教程,请参阅 “Unleash th