android学习—— eclipse 上调试android的自带应用

我们导入一个android自带应用的工程时,往往有很多错误。以自带的 AlarmClock 为例,导入eclipse后,往往出现很多错误,如下图所示:

android学习—— eclipse 上调试android的自带应用_第1张图片 

例如,上图中的Intent.ACTION_ALARM_CHANGED 无法访问,下面我们就找到源代码看看原因何在?

android学习—— eclipse 上调试android的自带应用_第2张图片

根据java 编程规范,我们知道这个api (静态变量)被隐藏掉了,所以在sdk中无法使用。在知道了原因之后,我们有几种解决方案(建议使用方法二):


1. 自己将源代码中的@hide去掉,然后编译一个sdk来替换默认的sdk。 
在linux上使用  make PRODUCT-sdk-sdk 命令,编译一个新的sdk出来,注意编译后其实我们不需要整个sdk,只需要android.jar这个文件替换掉sdk里的android.jar,例如:笔者的sdk里的jar对应的目录为: 
                         F:/Program Files/Android/android-sdk-windows/platforms/android-8/android.jar 
具体编译sdk的方法是,在linux编译环境下用命令 make PRODUCT-sdk-sdk ,成功后,会有如下提示: 
Package SDK: out/host/linux-x86/sdk/android-sdk_eng.stevewang_linux-x86.zip 
我们进入到 linux编译环境的 out/host/linux-x86/sdk/android-sdk_eng.stevewang_linux-x86/platforms/android-2.2/目录下可以看到android.jar 文件。使用此文件替换   F:/Program Files/Android/android-sdk-windows/platforms/android-8/android.jar 即可。替换前记得备份 
此方法较为麻烦,建议使用方法二


2. 添加framework 编译出来的class.jar文件到 eclipse的build path 
其实在编译android的时候,我们将framework 编译到一个临时的jar包中了,这个jar包的路径一般为: 
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 
[font='dejavu]我们只需要在linux上android源代码目录下使用make 命令即可生成此文件。   
[font='dejavu] 
[font='dejavu]由于这个jar文件中的api 还没有重新打包,里面被@hide掉的api并没有被去掉。所以我们依然能够引用里面 
[font='dejavu]被@hide的api 。而sdk 中的android.jar文件时重新打包生成的,其里标记有@hide的api已经被去掉了。 
[font='dejavu]所以我们把 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 拷贝到本地pc上。 
然后在工程中添加此jar包。 
具体方法: 
1 . 拷贝linux编译生成的  out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar到本机PC。 
2,在eclipse的Android项目中,选择项目属性->Java Build Path->Libraries->Add Library->User Library->Next-> UserLibraries进入到User Libraries管理界面,点击New新建一个User Library,比如android_framework,点击Add Jars把Jar包加入到建立的User Library中,最后点击OK。 
3.选择项目属性->Java Build Path->Order and Export,把所建立的User Libraries移到Android SDK的上面。

如下图:

android学习—— eclipse 上调试android的自带应用_第3张图片

之后我们的工程错误消失了:

android学习—— eclipse 上调试android的自带应用_第4张图片

到此问题基本解决。

转载自:http://www.bangchui.org/read.php?tid=274


eclipse 上调试android的自带应用方法 二

第一篇中说到问题基本解决,并没有说完全解决,那是因为android  模拟器上也有一个AlarmClock,如果安装直接运行这个程序,会有如下的错误提示:


所以,我们需要将模拟器里的AlarmClock 卸载掉。模拟器里的AlarmClock.apk是在system.img 里面的,系统启动后将其挂载为只读的文件系统了,所以无法删除,所以需要使用adb remount 命令挂载为可写的文件系统。然后将其删除。如下图:

从上图中的 ro 可以看出是只读的,即readonly。 使用 adb remount命令后可将文件系统重新挂载为可写,如下图:


如上图所示,AlarmClock.apk 已经有可写权限了( rw)。 然后我们使用rn 将此apk删除,然后重启模拟器即可。

注意:重启模拟器可能会把之前删掉的apk又重新恢复了,所以我们在将apk删除后,把 sdk 下面 的 system.img 拷贝一份到 C盘对应的avd目录。 对笔者而言,sdk 的system.img在以下目录:F:\Program Files\Android\android-sdk-windows\platforms\android-8\images 。而svd在以下目录:C:\Documents and Settings\xutao\.android\avd\2.3.avd,读者可根据自己的实际情况自行找到相关目录

你可能感兴趣的:(android学习—— eclipse 上调试android的自带应用)