月度归档:2011年06月

android-ndk-r5c发布

一段时间没有关注android了,今天上android官方网站,发现好多更新呀。android 2.3.4和android 3.1的SDK都已经出来了,我比较关注的ndk也更新到了r5c,大致浏览了一下android-ndk-r5c的changes,没有新的特性,只是修复了r5b的一些bug。

重要的bug修复有:

  • 修正一处输入错误,该错误使得LOCAL_WHOLE_STATIC_LIBRARIES不能在新的工具链上正常工作,也修正了docs/ADROID-MK.html中关于该变量的说明。
  • 修正了一处错误,链接了gnustl_static的代码在android2.2之前的平台上运行会崩溃。
  • android/input.h: 该头文件中自API 9(即android 2.3)中引入的两个函数不正确,本次得到修复,这破坏了源码的API接口,但对系统的二进制接口没有变化。

    这两个函数缺失了第三个参数’history_index’,它们正确的定义为:

float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
                                     size_t pointer_index,
                                     size_t history_index);

float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
                                     size_t pointer_index,
                                     size_t history_index);

  • 更新android-9 C库的arm二进制文件,在链接时暴露一些gingerbread才加入的新函数(比如pthread_rwlock_init)。
  • 修复一处使得gdbserver在某些HoneyComb设备(如Motorola Xoom)上崩溃的bug。

其它修复:

  • object文件总是按照它们出现在LOCAL_SRC_FILES的次序连接。之前的版本并不是这样,因为文件根据源文件后缀进行了分组。
  • download-toolchain-sources.sh: 修正一处愚蠢的错误,该错误导致-git-date参数在下载主分支时不工作。
  • 修复一个当模块导入自身而引起GNU Make死循环的问题。
  • 当import-modules失败时,打印出搜索路径。这对检查build系统的NDK_MODULE_PATH定义是否正确非常有用。
  • 当import-modules成功时,打印该模所在的路径到日志(在NDK_LOG=1时可以看到)。
  • <pthread.hhttp://mogoweb.net/files/archives/date/2011/>: 修复API level 9及以上的PTHREAD_RWLOCK_INITIALIZER定义。
  • 修复一个bug,如果LOCAL_ARM_NEON定义为true,build会失败(build/core/build-binary.mk的输入错误)。
  • 修复一处不编译.s汇编文件(但.S文件正确)的bug。
  • 提高在工程中包含很多头文件路径时,编译debug版本的速度。
  • ndk-gdb: 更好的检查’adb shell’失败(更好的错误信息)。
  • ndk-build: 修复一个很难遇到的bug,该bug在并行build可调试工程可能会出现。

设置Android平台开发环境

注:本文并非关于如果使用Eclipse开发Android应用程序。

本文主要翻译自android的文档"Using Eclipse”,但去掉了关于mac部分的内容,并且更新了一些过时的内容。

基本设置

首先,需要确保常规的Android开发系统已经设置好,本文中使用$ANDROID_SOURCE指代android源码根目录。

cd $ANDROID_SOURCE

make

重要:Eclipse build仅仅用于错误检查。真正开发中还是需要在Eclipse中编辑代码,在shell中进行make。

Eclipse需要一个目录列表来搜索Java文件,称作"Java Build Path”,保存在.classpath文件。android提供了一个示例版本供参考。

cd $ANDROID_SOURCE

cp development/ide/eclipse/.classpath .

chmod u+w .classpath

如果需要的话,可以编辑该.classpath拷贝。

增加Eclipse的内存设置

Android工程很大,在编译时可能造成Eclipse的Java虚拟机内存耗光。我们可以通过修改eclipse.ini避免这一问题。在ubuntu下,eclipse.ini位于eclipse所在目录。

Eclipse 3.6(Helios)的内存相关设置的缺省值为:

-XX:MaxPermSize=256

-Xms40m

-Xmx384m

Android开发的推荐设置为

-Xms128m

-Xmx512m

-XX:MaxPermSize=256m

现在可以启动Eclipse

eclipse

首先为Android开发创建一个工程:

1. File http://mogoweb.net/files/archives/date/2011/> New http://mogoweb.net/files/archives/date/2011/> Java Project

2. 给一个工程名,比如"android”

3. 去掉Use default location前的勾选,点击Browse…按钮,选择$ANDROID_SOURCE路径。

4. 点击Finish

5. 等待工程建立

一旦工程的workspace创建起来,Eclipse就会开始building(取决于project菜单下的Build Automatically是否勾选)。理论上,build应该没有错误。

当同步代码时

每次同步代码库,或者在Eclipse外修改文件(特别是.classpath),您需要刷新Eclipse视图:

1. Window http://mogoweb.net/files/archives/date/2011/> Show View http://mogoweb.net/files/archives/date/2011/> Navigator

2. 在Navigator视图,右键点击工程名

3. 点击上下文菜单Refresh

添加Apps到Build路径

缺省的.classpath包含了和系统系统和一些示例app的代码,可能并没有包含您所需要的app。要添加app,您必须添加app的源路径,可以在Eclipse中进行:

1. Project http://mogoweb.net/files/archives/date/2011/> Properties

2. 在左手边菜单中选择"Java Build Path

3. 选择"Source”页

4. 点击"Add Folder…”

5. 添加您的app的src目录

6. 点击OK

完成后,列表中的"source folder”路径类似于:

android/packages/apps/YOURAPP/src

取决于您所包含的app,您可能还需要添加android/dalvik/libcore下其他的src目录。

Eclipse格式

您可以导入development/ide/eclipse下的文件,让Eclipse遵从Android的编码风格:

1. 选择Window http://mogoweb.net/files/archives/date/2011/> Preferences http://mogoweb.net/files/archives/date/2011/> Java http://mogoweb.net/files/archives/date/2011/> Code Style.

2. Use Formatter http://mogoweb.net/files/archives/date/2011/> Import导入android-formatting.xml

3. Organize Imports http://mogoweb.net/files/archives/date/2011/> Import导入android.importorder

使用Eclipse调试模拟器

您可以使用eclipse调试模拟器,单步跟踪代码。首先,启动模拟器:

cd $ANDROID_ROOT

. build/envsetup.sh

lunch 1

make

emulator

在另外一个shell,启动DDMS

cd $ANDROID_SOURCE

ddms

现在,在eclipse中,您可以attach到模拟器:

1. Run http://mogoweb.net/files/archives/date/2011/> Open Debug Dialog…

2. 右键点击"Remote Java Application”,选择"New”

3. 给一个名字,比如"android-debug”

4. 设置"Project”为您的工程名

5. 保持Host为"localhost”不变,但将端口改成8700

6. 点击"Debug”按钮。

在Eclipse 3.6中build android 2.3.4相关问题

按照上面的方法导入android 2.3.4源码后,出现如下问题:

Project ‘gingerbread’ is missing required library: ‘out/target/common/obj/JAVA_LIBRARIES/google-common_intermediates/javalib.jar’

Project ‘gingerbread’ is missing required library: ‘out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar’

解决的方法是,在Java Build Path中,点击Libraries标签页,移除这两个文件,然后点击Source标签页,点击Add Folder…按钮,加入frameworks/ex/common/java

再build,就不会有错误了。

Cygwin/X介绍

在开发基于Webkit的浏览器这个过程中,深深体会到拥有一台强劲的开发机是多么重要,以我的本本(Core Duo T2300, 2.5G内存)为例,全编译QtWebkit需要三四个小时,如果不是全编译,仅仅最后的链接过程就要花上十几分钟。一般来说,公司一般都配备了性能强劲的服务器,服务器通常安装linux系统,作为文件服务器或者SVN服务器。所以如果能够充分利用服务器进行开发,可以大大加快开发速度。通常我们使用ssh登录到服务器,然后在命令行下工作。这对于编译程序来说没什么问题,但是如果要在服务器上进行调试且程序包含UI呢?下面就介绍一款这样的工具Cygwin/X。

Cygwin/X 是运行在Microsoft Windows上的X Window System实现。Cygwin/X 是Cygwin计划的一部分,可以用Cygwin的标准安装程序进行安装。在Cygwin安装过程中选择X server组件,如下图所示:

image

安装完成后,会创建Cygwin-X | XWin Server启动项,第一次运行XWin Server时,在启动的X-Terminal中运行:

cygserver-config

命令设置NT服务cygrunsrv。接下来添加一个Windows环境变量CYGWIN,其值为server

接下来设置Putty,在PuTTY Configuration中选择Category下的Connection | SSH,勾选Enable X11 forwarding,X display location框中输入localhost:0,如下图:

image

在XWin Server启动的情况下,在ssh命令行下输入gedit,是不是打开了gedit编辑器?