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市场展示
- 根目录\res\drawable-xdpi\ic_launcher.png——各像素密度下程序图标
9patch图片素材使用
- 除了左、上的扩充像素标记外,右、下的内容范围像素标记也必需涂上(且连续、不断点),否则实际布局显示效果将产生混乱、无法对齐等不可预测现象。
- 在eclipse(ADT)的XML布局设计界面上使用9patch的图片,在API16/17以下的版本保存编译XML会导致IndexOutOfBoundsException
异常,但不影响相应版本系统的运行显示效果,安装使用API16/17 SDK编译即可。相关信息可参考:http://stackoverflow.com/questions/10757997/9-patch-not-working
Android开发注意点小记的更多相关文章
- Android开发-动态布局小记
android动态布局相比静态布局,动态布局不用再将xml转变了布局代码,提高了一定的效率,当然可以忽略不记.动态布局主要是比较灵活,可以很快的在代码中直接修改布局,并直接使用控件进行业务逻辑开发.但 ...
- ADT Android开发环境搭建小记
1.之前因为产品方向原因,Android开发暂时搁浅,最近重新启动,SDK Manager.exe不能启动的话用启动\sdk\tools\adroid.bat即可启动SDK Manager.exe 2 ...
- Android开发的菜鸟小记
1.主线程异常:添加网络连接: 2.权限异常: 3.空指针异常:NullException: 添加网络权限: DEBUG:Connected to the target VM, address: 'l ...
- Linux环境下搭建Android开发环境
最近在折腾linux.因为咱是搞安卓开发的,所以少不了需要搭建Android开发环境,就此小记,希望能给向我一样的开发者一点帮助!开干! 1.安装JDK 下载JDK包,得到的是类似于jdk-8u65- ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- Android 开发一定要看的15个实战项目
前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...
- Android开发学习之路-关于Exception
Exception在Java中是表示异常的一个类.它是Throwable的子类. 而Exception的子类RuntimeException是一个特殊的异常类,在代码中不需要对此类进行throw,而是 ...
- Android开发学习之路-Android中使用RxJava
RxJava的核心内容很简单,就是进行异步操作.类似于Handler和AsyncTask的功能,但是在代码结构上不同. RxJava使用了观察者模式和建造者模式中的链式调用(类似于C#的LINQ). ...
- Android开发学习之路-记一次CSDN公开课
今天的CSDN公开课Android事件处理重难点快速掌握中老师讲到一个概念我觉得不正确. 原话是这样的:点击事件可以通过事件监听和回调两种方法实现. 我一听到之后我的表情是这样的: 这跟我学的看的都不 ...
随机推荐
- JavaSE 第二次学习随笔(关于内存的小题)
class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println(&quo ...
- windows环境下,用python绘图库matplotlib绘图时中文乱码问题
1.下载中文字体(看自己爱好就行)下面这个举例: SimHei - Free Font Downloadwww.fontpalace.co 2.下载之后,打开即可安装,将字体安装进windows系统 ...
- 004---os & sys
os模块和sys模块 这两个模块都提供了很多与操作系统之间交互的功能 使用 import os #当前脚本的工作目录,不是脚本目录 print(os.getcwd()) # 获取指定目录下的所有文件和 ...
- 工作中使用的linux命令汇总
ln -s /usr/local/tomcat/ ./tomcat 创建软连接到/usr/local/tomcat tar -zxvf apache-kylin-2.4.0-bin-hbase1 ...
- HyperLedger Fabric 1.4 区块链开发平台(4.1)
目前区块链开发平台分“公有链平台”和“联盟链系统”两类,“公有链平台”主要以以太坊为主的平台,可以在该类平台上进行代币的发行和根据各种模块搭建应用:“联盟链系统”主要以超级账本为主的开源系统,该类开源 ...
- FPGA算法学习(1) -- Cordic(圆周系统之向量模式)
旋转模式用来解决三角函数,实现极坐标到直角坐标的转换,基础理论请参考Cordic算法--圆周系统之旋转模式.那么,向量模式则用来解决反三角函数的问题,体现的应用主要是直角坐标向极坐标转换,即已知一点的 ...
- python2.7入门---字典(Dictionary)
这次咱们记录的是python中的字典这个鬼,首先我们得了解,字典是另一种可变容器模型,且可存储任意类型对象.字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 ...
- WPF DateTimePicker 和 TimeSpanPicker 控件发布
原文:WPF DateTimePicker 和 TimeSpanPicker 控件发布 根据http://datetimepickerwpf.codeplex.com/ 这个项目重构了一下代码设计了我 ...
- 1977: [BeiJing2010组队]次小生成树 Tree
1977: [BeiJing2010组队]次小生成树 Tree https://lydsy.com/JudgeOnline/problem.php?id=1977 题意: 求严格次小生成树,即边权和不 ...
- Eclipse 导入项目与 svn 插件关联全过程记录
文章摘自:http://www.cnblogs.com/xmmcn/archive/2013/03/01/2938365.html 感谢博友分享! Eclipse 导入项目与 svn 插件关联全过程记 ...