我创建了一个简单的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;
}
}
我哪里错了?
答案 0 :(得分:10)
答案 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
注释掉构建失败的错误行。
现在成功构建。
取消对该行的评论。
尝试再次构建。
最后
任何疑难解答后,请按照以下步骤操作。
答案 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”匹配的资源。
在我的情况下,删除库项目文件夹(如
)就足够了特别是,我的图书馆计划没有使用它们,一切都恢复正常:立即在主项目中R.Java自动为com.example.app和com.example.lib重新生成,所以有2个不同的R.java并没有互相打扰。
答案 8 :(得分:0)
如果你的android库无法解析R类,这意味着你的库XML文件中的某个地方你可能与主app模块有一些重复。可以是颜色名称,字符串名称,样式名称,布局名称等。只需检查所有库xml资源文件和文件夹,并确保没有任何内容与主应用程序模块相同。在那之后,也许项目需要一个干净,R import一切都应该没问题。
注意:还要检查库清单文件。