Android中R.java各种错误修复

1.Android R.java文件丢失的问题

R.java这个文件是会自动生成的。但是有时候你写错xml文件的时候,R.java是不会自动生成对应的值。这个时候我们会很习惯去clean一下这个项目,这个时候会突然发现,R.java竟然不见了。

       这个时候的你肯定非常的气愤,你可能会拼命在网上找答案,网上会有很多答案告诉你 右键项目--》Android Tools--> fix project properties。可能你怎么fix都不能把R.java弄出来。这个时候你就要考虑一下是不是某些xml写错了,出了问题。只要xml文件有问题,系统是绝对不会给你自动生成这个R.java文件,因为他要参照你的每张xml里的数据来生成R.java,所以自然就生成不了了。

       所以当你clear项目以后,错误就变了,跟变成空包,错误也是src包中的错误,若果你遇到这样的错误,并且项目中几十个xml文件,那肯定要郁闷死了,甚至崩溃了。

不过没关系。这个时候你再clean项目 ,这时console会打印出一次错误的信息提示:

例如

[2011-08-21 18:14:19 - myweibo] F:\android_workplace\myweibo\res\layout\home_list.xml:6: error: Error: No resource found that matches the given name (at 'src' with value '@drawable/usericon').

 

你就可以根据这些提示去查找哪个xml有问题,然后修改过来。再刷新一下项目,这个时候R.java文件就会出现了。

2

Android的R.java文件的package名修改

        新建一个工程,包名用的com.abc.manage,后来觉得不好,又改成com.my.manage,但是我发现gen下的R.java文件的包名还是原来的abc。

我甚至手动新建了R.java,包名为com.my.manage,我把com.abc.manage下的R.java删除,又自动恢复了。。

实在是很神奇。。。。。

通过查资料才知道,R.java是由ADT维护的,只要你将资源文件放到工程里,ADT就会监测到,自动在R.java里注册一个ID方便使用。

所以我推测,R.java不能手动修改,肯定是工程的某个位置,设置了R.java的package名,告诉ADT,R.java的位置。

首先想到的就是AndroidMainfast.xml这个文件了,果不其然,仔细查找后发现,就在这个文件最开头的mainfast的定义中,有个package="com.abc.manage",仍然还是旧的包名,修改成com.my.manage之后,发现工程里原来的R.java自动删除,只留下了com.my.manage下的R.java。

android R.java文件错误解决收集方法

方法0:右击你的工程(项目)——>Android Tools——>Fix ProjectProperties 即可。

方法 1:

我发现该项目的问题来自于string.xml文件中定义的一个字符串没有为单引号加转义(我的上一篇博客中提到的问题)。即

<stringname=”vehicle_title”>Title (e.g. zencart.me’scar)</string>(’需要加转义),修改后为:

<stringname=”vehicle_title”>Title (e.g.  zencart.me/’s car)</string>

修改所有资源文件中的所有错误,然后重新Build工程,R.java文件就重新生成

方法 2:右击你的工程(项目)——>Properties——>Android ——> 选择相应的target 然后 点击 apply 即可。

怨气:

、选择菜单 Project >> Clean ,前提是勾选上 Bulid Automatically(自动构建部署) , 点Clean后会重新构建项目,因为一般情况下,R.java文件在这个时候会重新更新生成一边,如果工程有错,就不会自动生成。
2、选择工程,右键 Android Tools >> Fix Project Properties这个操作有时候可以修正一些错误,但我的不行。
3、还有的说法是重新建一个空的工程,然后把这里面的代码,资源文件按照对应的包路径什么的拷进去,然后重新生成一边,这种方法,也想当于是第一种方法,都是重新构建部暑,性质一样的。

以上几种方法都试了,R.java依旧没出现,整个工程还是一大堆错误。随便点了一个有错误的布局XML文件,看到这样一个错误代码android:layout_height=”match_parent” ,之前我都用1.5/1.6/2.1 版本的SDK layout_height里面没有看到match_parent这个属性,然后问群一个兄弟说这个属性是2.X版本的,想了下,是不是因为工程的SDK版本和eclipse默认的SDK版本问题呢,于是选择工程,右键 Properties >> Android 然后看到右边的一块Target Name, 我的是选中 Android 1.5,然后换了一个 2.1 的 ,点击Appply ,工程自动构建,看到错误少了一些,换到2.2,重新构建,错误没了,久未解决的问题解决了,R.java也出来了,一个字高兴啊,启动模拟器一切正常。

总结下当导入其它源码时候,首先要保证源码的SDK版本和你eclipse默认版本是否一致。
查看源码版本办法:打开default.properties 文件,看target=android-7 这后面这个数是多少。
版本对应关系:target=android-3 <—>android 1.5 ,target=android-4 <—> android 1.6 ,
target=android-7 <—> android 2.1,target=android-8 <—> android 2.2 其它的自己测试下。

自动生成的工程里缺少R.java,

按照网上的方法“右击你的工程(项目)——>AndroidTools——>Fix Project Properties ”不管用,

确保项目编译了一下clean,或是右击项目–>property–>android–>applay一下 也是不行

google和百度一通后,无果。

 



### 回答1: 这个错误通常是由于在编译时混淆代码所导致的。Android Studio 可以通过 ProGuard 工具来进行代码混淆,而在最新版本的 Android Studio ,ProGuard 被 Google 替换为了 R8。 你可以尝试以下几个解决方法: 1. 在 build.gradle 文件禁用 R8 混淆工具: ```gradle android { ... buildTypes { release { ... minifyEnabled true useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 禁用 R8 android.enableR8=false } } } ``` 2. 如果禁用 R8 无法解决问题,可以尝试更新 Android Gradle 插件和 R8 版本: ```gradle buildscript { ... dependencies { classpath 'com.android.tools.build:gradle:3.5.0' // 更新 Android Gradle 插件版本 } } android { ... buildTypes { release { ... minifyEnabled true useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 使用最新版的 R8 android.enableR8.fullMode=true } } } ``` 3. 如果以上两种方法都无法解决问题,那么可能是代码混淆时出现了一些错误,你需要手动检查混淆规则并进行调整。 ### 回答2: 这个错误表示在Java程序出现了类型转换错误。具体地说,错误信息提到的两个类型 `com.android.tools.r8.graph.R0` 和 `com.android.tools.r8.graph.q0` 不兼容,无法进行类型转换。 要解决这个问题,我们可以考虑以下几点: 1. 检查代码逻辑:在程序检查是否有出现类型转换的地方,并确保进行类型转换时,两个类型是兼容的。 2. 检查依赖库的兼容性:错误提到的类型可能是由依赖库或框架提供的。我们需要确保使用的依赖库的版本与代码的类型兼容。如果不兼容,可以尝试更新依赖库的版本,或者寻找适配的库。 3. 检查使用的工具:错误信息提到了 `com.android.tools.r8`。我们需要确保使用的工具版本与代码的类型兼容。如果不兼容,可以尝试更新工具的版本,或者尝试使用其他工具。 4. 检查错误栈信息:查看完整的错误栈信息,尝试找到触发错误的具体代码行,这可能会提供更多的线索和解决方向。 在处理此类类型转换错误时,深入了解相关的类和库,并且有针对性地进行排查和修复是非常重要的。如果以上方法都不起作用,可以在开发者社区或论坛寻求帮助,以获取更详细的指导和解决方案。 ### 回答3: D8: java.lang.ClassCastException: com.android.tools.r8.graph.R0与com.android.tools.r8.graph.q0不兼容。 这个错误表明在使用D8编译器时发生了一个类转换异常。具体来说,代码尝试将"com.android.tools.r8.graph.R0"类转换为"com.android.tools.r8.graph.q0"类,但这两个类是不兼容的。 通常情况下,这可能是由于以下几个原因引起的: 1. 版本不一致:这两个类可能来自不同的版本,其一个类可能已经被更新或更改了。由于这些更改,它们之间的接口或实现可能已经发生了变化,导致类型转换异常。 2. 类路径问题:在构建或编译过程,可能发生了一些类路径错误或混淆问题。这可能会导致错误的类被加载或引用,进而导致类型转换异常。 3. 编译器错误:这个错误也有可能是D8编译器本身的一个问题,可能是由于编译器的某些错误或限制而引起的。 要解决这个问题,可以尝试以下几个步骤: 1. 确保使用的库、依赖项或插件的版本是兼容的。检查它们的文档或更新日志,查看是否存在任何版本不一致的问题。 2. 检查类路径和编译选项,确保它们正确设置并排除任何引起混淆的问题。 3. 如果可能的话,升级D8编译器的版本,以获取更好的兼容性和性能。 4. 如果以上步骤都不能解决问题,可能需要调查更深入的原因。可以尝试使用调试器或其他工具来跟踪错误并定位问题所在。 总之,D8: java.lang.ClassCastException: com.android.tools.r8.graph.R0与com.android.tools.r8.graph.q0不兼容,是一个类型转换异常,可能由版本不一致、类路径问题或编译器错误引起。通过检查和修复这些问题,可以解决这个错误
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值