旅游项目_Android开发编译环境设置总结

本文详细介绍了Android项目中不同类型的依赖管理方法,包括如何正确配置和使用库项目、jar包及解决常见错误,如NoClassDefFoundError异常。还探讨了Android编译过程以及如何设置JDK版本以避免字节码兼容性问题。
摘要由CSDN通过智能技术生成

A1.android一个项目应用另外一个项目和jar包引用

1.被引用的项目在“Android”选项里设置“Is Library”打钩
2.引用项在“Android”选项里设置“add"被引用项
3.android Dependencies会显示引用项目,依赖项目Android Private Libraries:表示放在libs里面的jar包引用,视为私有引用
Referenced Libraries:表示引用的外部jar包。

4.注意:
如果引用项目和被引用项目用到同一个jar包,版本需要保持一致。
Android Private Libraries和Referenced Libraries不能重复引用同一个jar包,两个都有时去掉一个。

 

 

 

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

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

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

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

 

 

打开 Console 控制台窗口,Android监控页中显示异常信息
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

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

出现这种错误的原因是,当前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.  1.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.

      2. 此时可以将android build tools升级为,编译提示的1.7或以上版本就可以解决该问题!

     3. 同时,如果Android项目的jdk compliance设置为jdk1.6,而引入的jar包如果是1.7的,可以将该Andorid项目的complier compliance levels设置为1.7   ,将generated .class files compatibility设置为1.7(因为引入的jar包为1.7)  ,将source compatiblity设置为1.6(因为源码的语言规范为1.6不能变)即可!

 

B1.android编译过程

 

 

android编译过程:

 

        先来看张图吧,了解一下android project的编译过程

图里没什么重点,最重要的就是java class file 会通过dx 转换为android 自己设计的dex文件.生气 这个是快速编译和调试的基础.安静

编译过程总是先得到class文件,然后转换成dex,最后再做签名对齐等操作.可以看到class才是实质,其它的都是点缀而已,如果我们修改了*.java代码,最先变动的是class文件.

打个比方,我改动了PackageManagerService.java.那么首先是根据我修改的java代码生成新的PackageManagerService.class,然后才是转换为dex格式的services.jar包.

如果我们要修改service.jar里的PackageManagerService,只要得到PackageManagerService.java修改后对应的class文件即可.是不是很简单.害羞有了这个class文件,

之后的转dex格式,签名什么的就易如反掌了.搞过java的都知道,class是java代码的目标文件,里面存放的是java byte code.直接在虚拟机里的可执行代码.

 

B2.Android基础之用Eclipse搭建Android开发环境

http://www.cnblogs.com/allenzheng/archive/2012/11/10/2762379.html

 

C1.private Libraries与android Dependency区别

1.android Dependency里面存放的是直接支持的类库,比如导入的第三方支持的源码生成的jar包,而private Libraries里面存放的是android私有的库(libs目录下的)还有第三方支持库中的lib(如meitaio\libs中的jar包,而且这些包有的要打包到APK中)

2.刚刚做了实验,这个是跟引用lib项目有关的.一般Private libs是本项目用的,不用导出到引用项目中去(但是当本项目被作为is libry所引用的时候,本项目的private lib也会被引用,但是不被导出?,具体设置是在order and export中设置.但是private libs应该是跟libs dependency一样

3.添加jar包到libs里面,系统自动把jar加载到android private libraries中;

4.为什么我在eclipse中放入libs之后,是在Android Private Libraries中,而非 dependencies?

 

热心网友

这是第三方jar包,dependencies是引用的libraries

追问:

大神,怎么才可以jar 包添加到Dependencies 里去呢?

 

上面是别人的例子,添加到dependencies里。

我也需要添加到

追答:

不需要添加啊。那是第三方的library,不是jar包吧

追问:

library 添加到别的项目里去,不需要添加吗?

追答:

我说的是android library,是在右键项目--properties--android---add中添加的那种

 

 

 

5.Private Libraries 就是libs里面的jar包的映射!你把libs中的jar包移除 Private Libraries中也就没有了

6.java项目使用eclipse导出jar放入android项目的libs里为何不编译?

首先java项目是没有问题的,导出的jar在其它的java项目中也可以正常使用。
编写java和android项目的过程中eclipse也没有给出警告,编译和打包都通过。唯独在(虚拟机和真机)运行调试的时候出现错误:

回答:

 

狂男风兼听则明偏信则暗,虚怀若谷上善若水。

harichen 赞同

因为google android使用的并不是oracle制定的java标准,而是一个第三方实现的java标准分支,所以编译上是有细小的差别的,而随着android和java的各自更新升级,这种分歧也越来越大。使用jdk而非adk编译的class对android来说有可能并不是正确有效的目标平台编译文件。
所以这个问题解决起来也非常容易:
1.使用较早期版本的jdk,可以尝试java6甚至java5。然后使用这个老版的jdk编译打包java项目为jar。然后这个jar就可以被用作android项目的第三方jar引用了。
2.如果换早期版本的jdk没有解决问题,或者不想安装老版的jdk,那么你可以尝试从android项目导出jar而非从java项目导出jar。具体实施步骤是:建立一个新的android项目,将java项目的代码文件导入,然后使用android项目菜单导出为jar,然后这样的jar就可以被放在别的android项目里正确引用了。

 

7.Android项目  libs、private libs、dependencies libs引用防止冲突;所选择的jar导入到APK总结:

a.  libs中的jar,如果想最终打包到APK中,要在source中加入libs的目录,这样libs中的jar包就会打入APK中,

b.  如果不想将第三方jar放入libs,可以在libraries条目中使用Add  jar引入第三方的jar(一般推荐放入libs中

c.  要确保libraries条目中所引用的jar包不能冲突

d.  在order and  Export条目中,不能重复将jar包打入到APK中,现在android将导出的jar包分为Android Dependencies和Android Private  libraries两种,目的是供开发者选择,但是一般这两个都要打入Apk中!

e.  order and  Export条目中的  libs、src、gen文件夹是肯定会被打包到APK中

 

D1.JDK,JRE,JVM区别与联系(ZZ):http://www.cnblogs.com/hencehong/p/3252166.html

我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

 

 

 

D2.Android开发搭环境步骤, ADT, JDK, SDK, NDK, Eclipse, CDT

http://blog.csdn.net/smking/article/details/7594019

 

相关网盘免费资源下载...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值