Android某lib不被编译的奇怪问题

  由于项目需要实现在线音视频交互,引入了版本较新的libjingle库,一番编码之后,编译通过,可是运行时就坑爹了,这个包里的类统统找不到,反编译了apk之后发现原来这个库里的内容根本没被编译进classes.dex中。这是为什么呢?走了一番弯路之后发现,原来是这个包的编译jdk为1.7。而我的eclipse编译jdk为1.6。低版本jdk编译的工程无法集成高版本jdk编译的库。看来只能升级eclipse和adt来解决了。

  为什么会出现上述情况?大概研究了一下。不同版本jdk编译出来的class文件格式可能存在差异,如果高版本jdk编译的class运行在低版本jvm之上,会出现无法解析高版本格式的问题。所以发现这种版本差异的时候直接不处理。其实这很合理,但是我觉得eclipse在编译时出现这种情况应该给报个错啊,你啥都不说,到时候程序缺胳膊少腿那不是坑么。。

  后面附加两句:安卓工程属性中选择的sdk版本是用于编译的,跟实际运行无关。你选择了5.0的sdk,不适用5.0独有的方法,那么运行在5.0以下版本也不会有问题。而被选择的这个sdk版本,编译时要有对应的buildtools,这个buildtools可以在sdkmanager里看到。buildtools19开始支持jdk1.7编译。如果要用jdk1.7编译,需要把编译sdk版本选择为4.4才可以。

posted on 2015-08-14 09:48  sylva  阅读(224)  评论(0编辑  收藏  举报