Android引用library,遇到的一些问题

最近接手了N年前的老项目A,本身的上线安装量很大,现在有这样的需求把另个应用B(安装量不高)融合在这个老项目中一起打包,借此来推动使用量。

由于B应用也不太熟悉,直接把B设置为library拿来引用。

问题一 : B 设置为 library,在A中引用 ,立马报错懵逼了
No resource identifier found for attribute ‘stroke_color’ in package ‘com.XXX’
如图:
这里写图片描述
自定义控件导致
这里写图片描述

引用的library含有自定义控件时,并且此控件有自定义的属性(它在attrs.xml中有自定义属性),此时在新项目中引用时,就不能在xml中引用包名。

而是引用:xmlns:panel=”http://schemas.android.com/apk/res-auto”

修改后问题解决:
这里写图片描述

问题二:
android import library switch语句报错case expressions must be constant expressions
这里写图片描述
原因分析

当我们在Android依赖库中使用switch-case语句访问资源ID时会报如上图所示的错误,报的错误是case分支后面跟的参数必须是常数,换句话说出现这个问题的原因是Android library中生成的R.java中的资源ID不是常数。

解决方案

  由于library的R.java中的资源ID不是常量引起的,我们可以在library中通过if-else-if条件语句来引用资源ID,这样就避免了这个错误。

问题三:

A,B项目 各有自己的application,既然要打包融合为一个项目,也就是只能在Androidmanifest.xml中设置一个:
这里写图片描述

两个application中都有要初始化的东西,而且还各不相同。那好吧考虑到类的继承来解决吧,由A的Aapplication来继承B的Bapplication,在Androidmanifest.xml中设置A的Aapplication。

问题四:

B项目中含有极光推送,而A项目中没有,在Androidmanifest.xml中配置极光推送所需的一些配置
这里写图片描述
一些 <category android:name="com.***.Apackage" />中设置A应用的包名,<receiver ....../> 中引用B引用中的receiver路径。

问题五:

用 Android Tools 》 Export Signed application package 打包还出错
这里写图片描述
修改 eclipse 》 window 》preferences
这里写图片描述
把Run full error check when exporting app前面的勾去掉就可以了

问题六:
打包报错(can’t find referenced class)
这里写图片描述

这里写图片描述

这里写图片描述

解决办法:
项目中所引入的第三方jar包使用”-libraryjars 包路径”指定好。然后,用-dontwarn com.xx.bbb.**
-keep class com.xx.bbb.* { ;}告诉proguard.cfg不用混淆指定的jar包,也不用提示这个包所报出的错。

参考资料:
[转]Android混淆打包及混淆后运行错误
http://blog.sina.com.cn/s/blog_693301190102vo66.html

android项目之间的相互引用出现的问题
http://blog.csdn.net/xiongping_/article/details/41956169

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值