• Android开发注意点小记


    暂时主要讨论以下几点:

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

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

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

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

    AndroidRuntime java.lang.NoClassDefFoundError: 引用包.类 

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

    [2014-06-20 14:58:23 - DriverAssistant_Web] Dx
    trouble processing:
    [2014-06-20 14:58:23 - DriverAssistant_Web] Dx bad class file magic (cafebabe) or version (0033.0000)
    ...while parsing 引用包/类.class
    ...while processing 引用包/类.class
    [2014-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.B extends wavky.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市场展示
    • 根目录 esdrawable-xdpiic_launcher.png——各像素密度下程序图标

    9patch图片素材使用

    • 除了左、上的扩充像素标记外,右、下的内容范围像素标记也必需涂上(且连续、不断点),否则实际布局显示效果将产生混乱、无法对齐等不可预测现象。
    • 在eclipse(ADT)的XML布局设计界面上使用9patch的图片,在API16/17以下的版本保存编译XML会导致IndexOutOfBoundsException异常,但不影响相应版本系统的运行显示效果,安装使用API16/17 SDK编译即可。相关信息可参考:http://stackoverflow.com/questions/10757997/9-patch-not-working
  • 相关阅读:
    堆和栈的区别
    九度OJ 1108 堆栈的使用
    九度OJ 1201 二叉排序树
    jQuery笔记——基础知识
    JavaScript笔记——事件
    一些知识
    JavaScript笔记——BOM的操作和浏览器的检测
    JavaScript笔记——面向对象与原型
    JavaScript笔记——基础知识(二)
    JavaScript笔记——正则表达式
  • 原文地址:https://www.cnblogs.com/wavky/p/3799009.html
Copyright © 2020-2023  润新知