R.java没有为Android库应用程序正确生成

时间:2011-09-12 06:51:44

标签: android

我创建了一个简单的Android库应用程序,只有一个包含TextView的活动。它运行正常,但当我在另一个应用程序中将其标记为库和引用时,当我尝试使用findViewById(R.id.welcome_textview)获取文本视图时,它会出错。

它生成了R.java,但是在我引用库的第二个应用程序中,它不包含id字段。以下是生成的两个R.java文件: -

图书馆申请

    /* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package com.example.mylibrary;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }
    public static final class id {
        public static final int welcome_textview=0x7f050000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}

其他应用程序中的相同文件

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package com.example.mylibrary;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}

我哪里错了?

9 个答案:

答案 0 :(得分:10)

经过几个小时的尝试很多东西,终于找到了问题。在引用的项目中,有一个自动创建的Layout文件夹,该文件夹为空。删除该文件夹修复了该问题。希望这有助于某人。

答案 1 :(得分:7)

还有一个可能的原因是基于我自己的痛苦经历:在库res / layout和app res / layout文件夹中使用相同名称的XML布局文件。

答案 2 :(得分:3)

主要原因在于没有形成R文件,因为Xml呈现,你在库中使用的依赖项数量在构建中产生了大量的R文件,所以

  

打开每个xml文件并在预览选项卡中查看是否存在   正确渲染还是不正确

如果不解决,它会自动生成所有R文件。

答案 3 :(得分:2)

似乎两次定义相同的样式会导致此错误。

在styles.xml中,我有

name

我刚刚将->更改为 AppThemMyLibrary 并生成了R文件。不确定这是否真的是问题的原因。

答案 4 :(得分:1)

首先确保您的应用包与Android库包不同,因为从您的示例中它们是相同的:com.example.mylibrary

需要注意的另一件事是,在应用程序的上下文中编译库时,Application的R.java文件和Android库R.java文件是相同的。换句话说,在编译应用程序时,所有引用的库都被编译为就像它们是物理上包含的应用程序一样。唯一的区别是库代码的R.java类具有不同的包名称。

答案 5 :(得分:1)

  

故障排除#1

我错误地写了

compile project(':myLibProject')

在我的应用程序 build.gradle 文件中。

正确的代码是,

compile project(':library:myLibProject')

因为库项目 myLibProject 位于目录中。

但是,由于代码错误,我的应用程序的根文件夹名为 myLibProject (空文件夹)中已创建一个空目录

请手动检查应用程序目录中的空白文件夹(使用操作系统的文件夹导航软件,而不是Android Studio)。

  

故障排除#2

如果您在项目级build.gradle文件中使用gradle包装器,就像这样

task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}

尝试将其评论出来。

  

故障排除#3

注释掉构建失败的错误行。

现在成功构建。

取消对该行的评论。

尝试再次构建。

  

最后

任何疑难解答后,请按照以下步骤操作。

  1. 清理项目(构建 - >清理项目)
  2. 重建项目(构建 - > 重建项目)
  3. 使缓存无效并重新启动(文件 - >无效 缓存和重新启动)

答案 6 :(得分:0)

我也遇到了问题,R文件没有正确生成。在我的情况下,问题是位于库项目的drawable文件夹中的“icon.png”文件。删除所有可绘制的文件夹后,所有编译。

答案 7 :(得分:0)

所以我还在Eclipse中添加了对我自己的Library Project的引用,之后,主项目中的R.java停止生成,因此错误到了(我可以在Console选项卡中看到它们)。

他们是这样的:

[2013-01-13 00:39:18 - AppName] [路径] \ res \ values-v11 \ styles.xml :7:错误:检索项目的父项时出错:找不到与给定名称“android:Theme.Holo.Light”匹配的资源。

在我的情况下,删除库项目文件夹(如

)就足够了
  • “res / values-v11”
  • “RES /值-V14”

特别是,我的图书馆计划没有使用它们,一切都恢复正常:立即在主项目中R.Java自动为com.example.app和com.example.lib重新生成,所以有2个不同的R.java并没有互相打扰。

答案 8 :(得分:0)

如果你的android库无法解析R类,这意味着你的库XML文件中的某个地方你可能与主app模块有一些重复。可以是颜色名称,字符串名称,样式名称,布局名称等。只需检查所有库xml资源文件和文件夹,并确保没有任何内容与主应用程序模块相同。在那之后,也许项目需要一个干净,R import一切都应该没问题。

注意:还要检查库清单文件。