使用Scala + sbt + sbt-android-plugin开发Android应用程序

开发Android程序通常所使用的语言是Java,但Scala做为一种有希望替代Java的语言,也逐渐被越来越多的Android者所熟悉。本文简要的介绍如何使用Scalasbt工具(Simple Build Tool)及sbt-android-plugin创建,编译,安装运行一个简单的Android程序。

  1. 环境准备

    Easwy的开发环境搭建在Ubuntu 10.04.3上,所以第一步是安装Ubuntu,具体过程略过。

    然后需要下载Android SDK,这一步可以参考文档Download the Android SDK完成。

    接下来在Ubuntu里安装Sun Java JDK,如果你使用OpenJDK,可以跳过这一步。首先去掉/etc/apt/sources.list中这两行前的注释,使能Java 6源:

    $ sudo vim /etc/apt/sources.list
    deb http://archive.canonical.com/ubuntu lucid partner
    deb-src http://archive.canonical.com/ubuntu lucid partner 

    然后安装Java 6 JDK:

    $ sudo aptitude install sun-java6-jdk 
  2. 安装Scala、sbt和sbt-android-plugin

    首先安装Scala。到Scala Download Page下载Scala,Easwy下载的是Scala 2.9.1的IzPack Installer,下载后执行:

    $ java -jar scala-2.9.1.final-installer.jar 

    按提示安装即可。

    然后安装sbt。到sbt wiki上下载sbt-launch.jar,然后创建一个脚本来调用它:

    $ vim ~/bin/sbt
    java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"
    
    $ chmod u+x ~/bin/sbt 

    最后安装sbt-android-plugin。因为sbt-android-plugin还在开发中,在此Easwy直接checkout它的源代码,然后安装在本地:

    $ git clone git://github.com/jberkel/android-plugin.git
    $ cd android-plugin
    $ sbt publish-local 

    sbt在第一次运行时会下载它所依赖的包,耗时会久一些,此过程只需进行一次。

  3. 自动生成Android应用程序框架

    设置好上面的环境后,可以使用sbt-android-plugin来自动生成一个简单的Android应用程序框架。插件的作者推荐使用一个名为giter8的模板工具来生成框架。首先需要下载giter8工具:

    $ cd ~/bin
    $ curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
    $ ~/bin/cs n8han/giter8 

    这几条命令会下载一些它们所需的包,需要一些时间。接下来就可以用giter8工具,根据指定的模板自动生成一个Android应用程序:

    $ ~/bin/g8 jberkel/android-app
    
    Template for Android apps in Scala
    
    package [my.android.project]: com.easwy.projects.helloworld
    name [My Android Project]: Hello World
    main_activity [MainActivity]:
    scala_version [2.9.1]:
    api_level [10]:
    useProguard [true]:
    
    Applied jberkel/android-app.g8 in hello-world 

    这条命令会提示你输入一些参数,然后根据你输入的参数生成一个Android应用程序的框架。

    事实上,此命令直接找到保存在github.com上的模板,然后根据模板生成Android应用程序的目录框架。在本例中所使用的模板是jberkel/android-app。你也可以自己创建一套模板,生成更适合自己的目录框架。

  4. 编译、安装、运行Android程序

    由上面的模板生成的Android应用程序,其实就是一个简单的“Hello World!”应用,你可以直接编译、安装、运行它。

    首先进入sbt的交互模式:

    $ cd hello-world
    $ export ANDROID_SDK_ROOT=~/bin/android-sdk-linux_86
    $ sbt

    开始编译:

    > android:package-debug 

    然后用下面的命令启动你的Android模拟器(如果你还没有模拟器,参考Managing Virtual Devices创建一个):

    > android:emulator-start api10

    上面的命令启动了名为api10的模拟器,下面安装运行我们编译出来的Hello World程序:

     > android:start-emulator 

    现在可以看到Hello World程序已经在api10 emulator中运行了。

在后续的文章中,Easwy会继续介绍使用Scala开发Android程序的心得。

更多内容,请阅读易水博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/using-scala-sbt-for-android-development/

文章的脚注信息由WordPress的wp-posturl插件自动生成

在Linux上使用adb访问魅族M9手机

在windows上通过adb访问M9很简单,WinXP用户到魅族 M9 产品支持 下载USB驱动,安装后就可以通过adb访问M9了。似乎Win 7能直接识别M9,不需要手动安装驱动。

要在Linux上访问魅族M9手机,并不需要安装驱动,不过需要设置一下udev。以root身份增加一个文件/etc/udev/rules.d/51-android.rules,内容如下:

SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="18d1", MODE="0666" 

这个文件需要对所有用户可读,执行一下下面的命令:

chmod a+r /etc/udev/rules.d/51-android.rules

然后就可以通过USB线把M9手机连接到Linux,通过adb可以检测到M9:

$ platform-tools> ./adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
M9W1B00AKAP5NU1064	device

这种方法在Ubuntu 10.04及Centos 5.3上都可以正常工作,不过似乎是第一句在Ubuntu中生效,第二句在CentOS中生效。我比较奇怪的一点是,18d1是Google公司的USB vendor ID,为什么魅族不用自己的vendor ID呢?

更多文章,请访问易水博客

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/connect-meizu-m9-to-linux/

文章的脚注信息由WordPress的wp-posturl插件自动生成

在Ubuntu上编译Android Gingerbread 2.3.1

前几天下载了Android 2.3.1的源代码并在Ubuntu 10.04(32位)上编译通过。这篇文章简要记录了下载、编译的过程。

关于搭建Android开发环境的文章已经有很多,本文只简要介绍一下,做为备忘。

[ 编译前的准备 ]

这一步安装获取源代码以及编译所需要的软件,使用如下命令:

 $ sudo aptitude install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev 

另外,参考别人编译Android 2.3的经验,安装了下列软件包:

$ sudo apt-get install lib64z1-dev libc6-dev-amd64 g++-multilib lib64stdc++6 

虽然Android官方网站上讲不支持Java 6,不过我使用Java 6也可以编译通过,所以在这里Easwy安装的是Java 6。首先去掉/etc/apt/sources.list中这两行的注释,使能Java 6源:

deb http://archive.canonical.com/ubuntu lucid partner
deb-src http://archive.canonical.com/ubuntu lucid partner 

然后安装Java 6 JDK:

$ sudo aptitude install sun-java6-jdk 

接下来下载repo工具,这是Google提供的一个Python脚本,方便管理多个Git版本库:

$ cd ~
$ mkdir bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo 

记得把repo加到你的路径中,方便以后使用。编辑~/.bashrc,加入下面一行:

PATH=$PATH:~/bin
export PATH 

然后用命令. ~/.bashrc,以后就可以直接使用repo命令了。

接下来获取Android 2.3.1的源代码:

$ mkdir mydroid
$ cd mydroid 
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.1_r1
$ repo sync 

[ 编译Android ]

接下来开始编译:

$ make -j`grep '^processor' /proc/cpuinfo | wc -l` 

上面的命令中,-j参数告诉make启动多个并行任务进行编译,在支持多核的CPU上能加快编译速度。如果你知道你CPU是几核的,可以直接把这部分替换成-j2(双核)。

我在编译的过程中遇到下面的错误:

************************************************************

You are attempting to build on a 32-bit system.

Only 64-bit build environments are supported beyond froyo/2.2.

************************************************************

这是因为在Makefile中检测了CPU的字长。我直接把build/core/main.mk中下面的话注释掉:

#ifneq (64,$(findstring 64,$(build_arch)))
#$(warning ************************************************************)
#$(warning You are attempting to build on a 32-bit system.)
#$(warning Only 64-bit build environments are supported beyond froyo/2.2.)
#$(warning ************************************************************)
#$(error stop)
#endif 

接下来又遇到下面的错误:

Docs droiddoc: out/target/common/docs/api-stubs

Could not load ‘clearsilver-jni’

java.library.path = out/host/linux-x86/lib

make: *** [out/target/common/docs/api-stubs-timestamp] Error 45

make: *** Waiting for unfinished jobs….

Could not load ‘clearsilver-jni’

java.library.path = out/host/linux-x86/lib

make: *** [out/target/common/docs/doc-comment-check-timestamp] Error 45

这是由于clearsilver在编译时如果检测到使用Java JDK 6,就使用64位编译。要避开此错误,需要修改下面四个文件:

  • external/clearsilver/cgi/Android.mk
  • external/clearsilver/java-jni/Android.mk
  • external/clearsilver/util/Android.mk
  • external/clearsilver/cs/Android.mk

把这四个Makefile中的下列语句注掉即可:

# This forces a 64-bit build for Java6
# Comment by Easwy
# LOCAL_CFLAGS += -m64
# LOCAL_LDFLAGS += -m64 

然后在external/clearsilver目录中执行一下make clean,然后回到项目根目录,继续make即可。

当编译完成时,生成的image文件放在out/target/product/generic目录中。

更多内容,请阅读易水博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/compile-android-gingerbread-2-3-1/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Android SDK 1.5预览版发布

刚刚在网上看到,Android SDK 1.5预览版已经发布。

在Android SDK 1.5中将包含很多用户关心的新功能,例如软键盘、语音识别、视频功能,以及更好的与Google产品结合。

刚刚尝试访问Google Developer网站,发现页面打不开,看来今天有太多的人访问了。^_^

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/android-sdk-15-update-release/

文章的脚注信息由WordPress的wp-posturl插件自动生成

T-Mobile计划推出基于Android的手提电话和平板电脑

刚刚在网上看到,美国运营商T-Mobile准备推出更多的基于Android的产品,包括家用的手提电话和平板电脑。

这二款产品都基于Google的Android平台,计划在明年(2010)年早期推出。根据泄露出来的资料,家用手提电话可以放在底座上充电,另外还会有一个独立的设备在它充电时进行数据同步;在手提电话之后,还计划推出一款7英寸显示屏的平板电脑(Tablet)。

T-Mobile的发言人拒绝回答关于公司未来产品的报道,不过他确认了公司计划推出若干个基于Android的产品。

现在看到做Android产品的,国内有华为,中移动,国外有三星(Samsun)、摩托罗拉(Motorola),计划在今年下半年推出的产品就有几款。现在对Android产品非常期待,希望有更多的Android产品推出。在有了比较之后,我肯定会入台一部的!^_^

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/t-mobile_plan_android_home_phone_and_tablet/

文章的脚注信息由WordPress的wp-posturl插件自动生成

三星Android手机今年第三季度面世

昨天刚刚看到三星Android手机发布的消息,虽然未经官方证实。今天又看到报道,三星Android手机计划在今年第三季度面世。

引用DigiTimes的报道

根据三星公布的消息,三星公司的第一款Android手机和HTP即将发布的HTC Magic手机在设计上和硬件规格上都很相似。两款手机都使用Qualcomm的3.5G芯片解决方案。

 

三星首款android手机

看来还要等上一段时间啊。第三季度,华为的Android手机也该出来了,到时会有更多选择的空间了。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/samsung-android-phones-coming-in-q3-2009/

文章的脚注信息由WordPress的wp-posturl插件自动生成

三星发布首款Android手机

据国外网站报道,三星已经展示了它的首款Android手机,不过这个消息还未得到三星官方的证实。

下面是三星Android手机的照片,虽然图片已经被模糊处理,不过还是可以大致看出手机的外形。

三星首款android手机

这款手机配置了触摸屏,内置528MHz的处理器,还提供了可靠的内部存储空间和迷你SD卡扩展插槽。另外,这款手机还支持4频GSM模块,可以在更多的国家使用。

不过,从目前看来,这款Android手机还只是面向美国和欧洲市场。不知道在中国市场上,什么时候可以看到Android手机的身影。

消息来源:Samsung’s first Android handset revealed?

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/samsungs-first-android-handset-revealed/

文章的脚注信息由WordPress的wp-posturl插件自动生成

华为Android手机预计第三季度上市

刚刚在手机中国上看到,华为的Android手机预计在今年第三季度上市。从展示的手机效果图上看,这款Android手机的外形和iphone很是相似,不知道它的功能是否全面,应用是否丰富。

华为展示的Android手机
华为展示的Android手机

由此看来,Android手机离我们越来越近了,而且Android平台被用做上网本操作系统的可能也越来越大。Android平台的成功,势必会推进Linux在嵌入式领域的发展,这也许是Linux继服务器领域外的另外一个突破。

Android应用程序的开发,倒是与嵌入式Linux没有太大关系。不过能为自己的手机开发应用程序,也是一件快乐的事。因为iphone的封闭,我太不想为写iphone应用,现在Android手机来了,可以自己动手DIY了。

Let’s enjoy it!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/huawei-android-mobile-phone-overview/

文章的脚注信息由WordPress的wp-posturl插件自动生成