搞了一天,发现很麻烦。作个备忘录。
android带了一些java的库,比如javax,但是不完整,要用到本身不包括的那一部分的时候,无论是直接把整个jar或者部分加到工程中编译,都是不行的,
android在编译的过程中,会先生成.class文件,然后再把所有.class转换成一个.dex,再打包成.apk。
.dex实际上就是跑在dalvik上的二进制码,跟标准java的二进制码是不一样的。转换成一个.dex从网上看到的一些文章据说是能提高运行效率。
如果是想把jar直接编到工程里,会被告知“你正在编译core library”,因为包名和core library里的某些包是一样。如是仅仅把jar路径设到classpath里,这样生成apk,install到手机上,运行时,会报“找不到文件“错误。
bear提议从jar包对应源码里把需要的部分抠出来,放在另一个文件夹里,改下包名,编译的时候就不会被认为是core lib了,但是编译的时候,会发现又缺一些东西,再抠出来加上,还不够,好像有点恶性循环了。不过如果不是太多的话,这么做倒也是一个方法。
要不我就通过jni调C的库吧。
哎,非常不理解为什么android自带的一些jar是不完整的,这样会导致很多现成的java应用要移植到android上时运行不了,而google费心删掉的那一部分究竟会对android造成什么不好的影响呢?不理解啊不理解,不知道哪天能想明白。。
refer from http://www.douban.com/note/53489145/
key: 包名被认为和core lib一样