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

没有为Android库应用程序正确生成R.java,android,Android,我创建了一个简单的Android库应用程序,其中只有一个包含TextView的活动。它工作正常,但当我在另一个应用程序中将它标记为库和引用时,当我尝试使用findViewById(R.id.welcome\u textview)获取文本视图时,它会出错 它生成了R.java,但在我引用库的第二个应用程序中,它不包含id字段。下面是生成的两个R.java文件:- 图书馆应用 /* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class w

我创建了一个简单的Android库应用程序,其中只有一个包含TextView的活动。它工作正常,但当我在另一个应用程序中将它标记为库和引用时,当我尝试使用findViewById(R.id.welcome\u 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;
    }
}
另一个应用程序中的相同文件

    /* 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;
    }
}

我哪里出错了?

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


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

经过几个小时的尝试,终于发现了问题。在引用的项目中,存在自动创建的布局文件夹,该文件夹为空。删除该文件夹修复了该问题。希望这对某人有所帮助。

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

根据我自己的痛苦经历,还有一个可能的原因:在库res/layout和app res/layout文件夹中有同名的XML布局文件。

因此,我还将Eclipse引用添加到我自己的库项目中,在此之后,主项目中的R.java停止了生成,所以出现了错误(我可以在控制台选项卡中看到它们)

他们是这样的:

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

在我的例子中,删除库项目文件夹就足够了,比如

  • “res/values-v11”
  • “res/values-v14”
特别是,我的库项目没有使用它们,一切都恢复正常:在主项目中,R.Java立即自动为com.example.app和com.example.lib重新生成了自己,因此有两个不同的R.Java,它们不会相互干扰

故障排除#1

我写错了

compile project(':myLibProject')
在我的应用程序build.gradle文件中

而正确的代码是

compile project(':library:myLibProject')
因为库项目myLibProject位于library目录中

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

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

故障排除#2

如果在项目级build.gradle文件中使用gradle包装器,如下所示

task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}
试着把它评论出来

故障排除#3

注释掉生成失败的错误行

现在做一个成功的构建

取消对该行的评论

尝试重新构建

最后

进行任何故障排除后,请执行以下步骤

  • 清理项目(生成->清理项目)
  • 重建项目(构建-> 重建项目)
  • 使缓存无效并重新启动(文件->使无效 缓存和重新启动)

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

    在styles.xml中,我

       <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
        </style>
    
    
    

    我刚刚将
    名称更改为appthemylibrary,生成了R文件。不确定这是否真的是问题的原因。

    不形成R文件的主要原因是因为Xml呈现,库中使用的依赖项的数量使得生成的R文件数量很大,因此

    打开每个xml文件,并在“预览”选项卡中查看它是否正确 渲染是否正确


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

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


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

    在第二个项目中,您没有在xml文件中声明
    welcome\u textview
    ,这就是我不应该再次声明它的要点。。。我正试着做一些像这样的事情来回答。应用程序包实际上是不同的-com.example.mylibrary和com.example.myapplication。添加应用程序库后,它在gen中创建了一个pkg-com.example.mylibrary,并在那里生成了R.java文件。它应该生成两个相同的文件作为应用程序资源和库资源的联合。我有一个库包,它的包名与我的主包名相同。ant没有为主包资源生成R.id.*。我只是简单地更改了库包的包名(并在其中引用了R.id),ant编译得很好。哇,我尝试了所有选项,在搜索了1天之后,终于找到了你的解决方案,并且现在可以工作了。非常感谢,上帝保佑你。我的座位