失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android开发注意点小记

Android开发注意点小记

时间:2020-05-30 02:32:27

相关推荐

Android开发注意点小记

暂时主要讨论以下几点:

Android引用外部包,报NoClassDefFoundError异常崩溃同名包引用关系问题程序图标9patch图片素材

Android引用外部包,程序报java.lang.NoClassDefFoundError异常崩溃

在Android工程中,引用第三方jar包(尤其是经过本地编译的),在Java代码开发环境中正常编译输出,但到手机等设备上运行时一旦运行到引用该包的代码,立即异常崩溃,系统显示进程意外停止提示窗口,LogCat报出异常信息

dalvikvmCould not find class '引用包.类', referenced from method...

AndroidRuntimejava.lang.NoClassDefFoundError: 引用包.类

打开Console控制台窗口,Android监控页中显示异常信息

[-06-20 14:58:23 - DriverAssistant_Web] Dx

trouble processing:

[-06-20 14:58:23 - DriverAssistant_Web] Dx bad class file magic (cafebabe) or version (0033.0000)

...while parsing 引用包/类.class

...while processing 引用包/类.class

[-06-20 14:58:23 - DriverAssistant_Web] Dx 1 warning

出现这种错误的原因是,当前Android工程(API17 android4.2.2 ADT v21.1)默认使用的是jdk 1.6(JDK 6.0)编译器,而引用的包编译环境大于1.6(如1.7等),由于编译出的字节码版本不一致,导致无法转换成android虚拟机dalvikvm可读的字节码,因此引用的这个类包实际上并没有被编译到这次输出的apk中,自然程序运行的时候就找不到对应的类文件了。

解决方法:

获取引入包的源代码工程,右击工程菜单: Properties(属性)->Java Compiler 窗口中可以选择工程编译使用的jdk版本,选择1.6或1.5,点击确定,重新编译输出jar包,导入Android工程即可:

PS. Android工程本身是不支持更改jdk编译版本的,如果尝试更改至1.7的话,Console控制台将得到错误输出信息Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.

同名包引用关系问题

同时引入两个同名jar包到工程,例如:

a.jar

|---wavky.wand.A

ab.jar

|---wavky.wand.A

|---wavky.wand.Bextendswavky.wand.A

在javaSE中测试,使用wavky.wand.B 类时,不会导致冲突,但只会引用第一个加载的jar包的类

在下面的Order and Export界面中,可以调整相应类包的加载顺序,调整 a.jar 到 ab.jar 上面,则类B继承自 a.jar 中的类A(ab.jar中的类A不再被类加载器加载)。

但是,无法通过这种调整加载顺序的方式替换JDK中的包类!

但在Android中,这种调整类加载顺序的方式似乎已经不再起作用,所有外部引用的包自动被整合为一个单独的Android Dependencies,而且跟javaSE的情况一样,无法通过将Android Dependencies调整至顶层的方式替换Android SDK中的原生同名包类,如果外部引用与Android SDK内同名的包,则自动优先使用SDK内的jar包的类,而忽略外部引用。

程序图标

根目录\ic_launcher-web.png——512×512分辨率图标,用于google Play市场展示根目录\res\drawable-xdpi\ic_launcher.png——各像素密度下程序图标

9patch图片素材使用

除了左、上的扩充像素标记外,右、下的内容范围像素标记也必需涂上(且连续、不断点),否则实际布局显示效果将产生混乱、无法对齐等不可预测现象。在eclipse(ADT)的XML布局设计界面上使用9patch的图片,在API16/17以下的版本保存编译XML会导致IndexOutOfBoundsException异常,但不影响相应版本系统的运行显示效果,安装使用API16/17 SDK编译即可。相关信息可参考:/questions/10757997/9-patch-not-working

如果觉得《Android开发注意点小记》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。