case expressions must be constant expressions(android:关于主工程和library project)

本文介绍了在Android开发中遇到的'case expressions must be constant expressions'错误的成因和解决方法。错误源于将项目标记为Library时,R文件中的常量变为变量。解决方案包括将项目恢复非Library状态或用if-else替换switch-case。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   今天我在使用E做安卓开发的时候,不小心删除了项目中的android_sdk,如下红色框中的jar包,需从新导入
 。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200313104425227.png)
 可以通过:选择项目右键--Build Path--Configure Build Path,然后选择Libraries--add Library..,如下图
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200313104841812.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE1MTEwNjgx,size_16,color_FFFFFF,t_70)

然后选择Android Classpath Container,选择需要添加的项目,点击确定即可,如下
在这里插入图片描述
在这里插入图片描述
通过以上可以将不小心删除的Android_SDK添加回项目中,如果你想修改添加的SDK版本,可以通过
Project–Properties–Android,如下图
在这里插入图片描述
Project Build Target如果没有你想要的版本,可以去Android_SDK的SDK Manager管理器中更新下载即可。
注意:值得注意得视上图中绿色框的is Library是什么意思,我将在最下面说明,因为我的不正当操作,勾选了此项,又导致另外一个错误case expressions must be constant expressions,如下图框中部分会报错
在这里插入图片描述
进入该错误的提示帮助,通过阅读帮助,大概理解就是 case后面必须跟常量,必须要常量,而此时的R.id.rbProfile点进去之后发现并非是一个final的常量,此处就跟奇怪了,明明我说明都没动,怎么常量就变成变量去了,这就不得不说一下安卓的R文件了,在你创建控件id时候,安卓会在R文件中给该ID创建一个常量代表该控件,但是如果你勾选上上上图中的is Library时候,R文件中的常量全部变成了变量,导致错误。解决方法有两个,
一。如果你确实是想将该项目作为library project的jar包给其他项目引用使用的时候,你需要将所有报错的switc-case改成if–esle即可,这是官方的推荐方法。
二。如果你只是误操作,像我一样勾选了is Library,并未将此项目作为library project的打算,那么,你只需将is Library的勾去掉即可。

1、如何将一个android工程作为库工程(library project)

library project是作为jar包被其它android工程使用的,首先它也是普通的android工程。然后:

1)在eclipse Package Explorer, 右键android工程选择Properties

2)选择Android,下拉右边的滚动条到最下面,选中”Is Library“

3)点击Apply,点击OK

这个android工程就成为了library工程。

注意:作为library工程可以引用外部jar包,但不能引用其它library工程,在library工程中不能使用aidl文件,不能引用raw、assets下资源
另外当试图运行一个library工程时,eclipse将报错:

2、主工程如何引用库工程

当引用lib工程后,主工程就可以调用library工程的相关类和方法。android工程引用其它library工程步骤:

1)在Package Explorer, 右键android工程选择Properties

2)选择Android,下拉右边的滚动条到最下面

3)点击Add按钮打开lib工程选择对话框

4)从选择对话框中选择工程,点击OK

5)点击Apply按钮,点击OK按钮

3、在主工程manifest.xml文件中声明lib工程的组件

主工程manifest.xml中必须添加library工程的所有Activity、Service、receiver、provider,还要添加library工程的permission、uses-library等属性,注意引用的组件要使用完全的包名,否则将报对应的NotFoundException。

4、库工程与主工程资源冲突问题

当运行有引用library工程的android工程时,android工具将会合并library工程与主工程的所有资源。如果一个资源ID将有可能在library工程之间或library工程、主工程之间都有定义,这时候优先级别高的资源ID将覆盖优先级别低的,使用资源时将使用有线级别最高的工程的资源。工程之间优先级别如何判定,请看下一条。

5、库工程之间以及主工程的资源使用上的优先级问题

上图显示一个android工程引用了四个library工程,这四个library工程和主工程之间是有优先级之分的。android主工程的优先级别最高,四个library工程科举上图排序有上到下优先级别依次降低。library工程之间也可以手动排序,选择其中一个,点击up(提高优先级)或者down(降低优先级)。

6、库工程和主工程使用不同的android platform version问题

主工程打包时,android sdk版本使用的是主工程。所以library工程使用的android sdk版本要不高于主工程的sdk版本。如果library工程sdk版本高于主工程,将不能通过编译。
(如果你觉得本人的文章对你有所帮助,客官可否打赏瓶水喝)
微信 支付宝
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值