最近接手了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