Android基于模拟器的调试
Android基于模拟器的调试
本文档说明怎样在模拟器上使用我们自己编译的Android平台环境进行调试,以及使用过程中可能会碰到的问题和解决方法。
对于Java开发而言,开发环境取决于我们所包含的.jar文件。只要包含我们自己生成的.jar文件,就可以基于模拟器调试我们自己的模块。
1生成Android开发环境
我们所需要的所有.jar文件都生成在Android下面的路径下:
out\target\common\obj
out\host\linux-x86\android-sdk_eng.[USERNAME]_linux-x86.zip内的android.jar
上面的这些.jar文件通过下面两步编译生成:
make
make sdk
其中,执行make sdk时会出错,按照下面的方法修改文件:
frameworks/base/core/java/android/hardware/Camera.java: line 1359
原来的代码:
/**
* Set GPS latitude reference coordinate. This will be stored in JPEG EXIF
* header.
* @param latitude GPS latitude reference coordinate.
*/
public void setGpsLatitudeRef(String latRef) {
set (KEY_GPS_LATITUDE_REF, latRef);
}
修改为:
/**
* Set GPS latitude reference coordinate. This will be stored in JPEG EXIF
* header.
* @param latRef GPS latitude reference coordinate.
*/
public void setGpsLatitudeRef(String latRef) {
set (KEY_GPS_LATITUDE_REF, latRef);
}
使得生成Doc的元字符@param后紧跟的那个字符串为参数列表中的一个,其他几处错误为同一类型的错误,使用同样的方法修改即可。
2引用生成的Android开发环境
上面说过了如何生成Android开发环境,然后我们可以把out\target\common\obj整个复制到模拟器使用的Android SDK中来。
在生成的Android SDK(out\host\linux-x86\android-sdk_eng.[USERNAME]_linux-x86.zip)中,我们只需要使用其核心库android.jar即可,将其解压到本地。
2.1Android核心库的替换
使用Eclipse开发时,设置library指向我们生成的Android SDK中的android.jar文件即可。我们可以在下面的两个方法中选择一个:
方法一:
对于原来的核心库Android_SDK_Diretory\platforms\android-8\android.jar
用我们生成的Android SDK中的android.jar覆盖。
方法二:
设置位置为:Properties -> Java Build Path -> Libraries
Remove原来使用的Android库,建立一个我们自己的User Library来包含文件我们生成的Android SDK中的android.jar。
建立新的User Library方法为: Properties -> Java Build Path -> Libraries -> Add Library -> User Library -> User Libraries -> New
建立完User Library后,使用Add JARs添加我们需要的.jar文件。
上面的两种方法,推荐使用第一种。如果使用第二种方法,我们每次新建Android Project 的时候都要修改Java Build Path。
2.2Android可选库的引用
除了使用核心类库android.jar外,很多时候我们还引用了其他模块和其他可选库。我们需要的这些库都可以在out\target\common\obj中找到。
使用时发现缺少哪个库,在out\target\common\obj中找到对应的库,然后在已有的User Library(如果没有,新建一个)上添加。不要使用Add External JARs直接添加库(Eclipse 3.4.1 有这样添加导致“Out of Memory”的Bug,其他版本未知)。
2.2.1查找Android可选库
如果发现缺少某个类,就要根据该类所处模块的编译规则(Android.mk中定义)来确定对应.jar文件所处位置。
一般来说,我们可以简单地通过下面的步骤确定对应的.jar文件
(1)确定缺少的类属于哪个模块:一般来说,该类文件所在的文件夹名即为模块名;
(2)确定该模块类型是APPS还是JA V A_LIBRARIES;
(3)对应的.jar文件为:$(TYPE)\$(NAME)_intermediates\classes.jar;其中$(TYPE)为APPS或者JA V A_LIBRARIES,$(NAME)为模块名。
比如:提示错误import https://www.360docs.net/doc/547205045.html,mon.GoogleSearch;
我们搜索文件GoogleSearch.java,发现其位于:
packages/apps/QuickSearchBox/src/com/android/quicksearchbox/google/GoogleSearch.java
文件夹src上一层文件夹QuickSearchBox即为该模块名,QuickSearchBox模块类型为APPS,那么我们要查找的.jar文件为:
APPS\QuickSearchBox_intermediates\classes.jar
我们添加该.jar文件到User Library,错误解决。
为了方便搜索.java文件,下面的附件中列出了Android源代码中所有.java文件的路径
3 调试Android
3.1设置源文件
当引用的Android库设置好之后,我们的模块就可以在eclipse中就编译通过了。也可以在当前的模块中设置断点进行单步运行调试。如果需要调试Android Framework,还需要做进一步的设置。
1.设置引用库的源文件路径(Source attachment)
2.设置Link Source,方法为Project -> Java Build Path -> Source -> Link Source
如上设置所需要的源文件已经做好压缩包,解压到本地即可:
\\192.168.11.174\Android\software\android-sdk-src.zip
该压缩包可以自己在Android下生成,将下面的工具拷贝到Android根目录执行(拷贝过去的文件没有执行权限,使用chmod a+x加上执行权限):
\\192.168.11.174\Android\software\build-sdk-source
注意:生成压缩包前应该执行过make和make sdk,否则生成的压缩包不完整,执行完后,生成的压缩位于Android_Base\android-sdk-java-source。
3.2其他
如果基于Android源代码编译和调试,请按下面步骤建立工程:
New Android Project –> Create project from existing source
Android模拟器调试中常见问题
错误:Re-installation failed due to different application signatures 解决办法:
1.删除已经安装的apk,如果是system app,则需要先执行adb remount,如删除Launcher2.apk:adb remount
adb shell
#rm /system/app/Launcher2.apk
#exit
2.卸载已有的模块
adb uninstall https://www.360docs.net/doc/547205045.html,uncher
3.安装新模块
adb install your_project_directory\bin\Launcher2.apk
错误:安装apk时出现Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]
解决办法:
找到并删除文件AndroidManifest.xml中内容:android:sharedUserId=*
错误:R cannot be resolved
解决办法:
使用WinRAR打开原来的android.jar,将文件resources.arsc解压出来,并替换我们现在使用的android.jar中的同名文件