文档库 最新最全的文档下载
当前位置:文档库 › Android基于模拟器的调试

Android基于模拟器的调试

Android基于模拟器的调试
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.wendangku.net/doc/5b7205045.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.wendangku.net/doc/5b7205045.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中的同名文件

相关文档