手机上的Scala

先决条件

在本文中,我们将创建一个在 Android 设备上运行的移动应用程序。您将需 要安装 Android SDK;本文使用 V1.5 SDK。应用程序代码将用Scala编程语言编写。如果您从来没用过 Scala,那么没有关系,因为本文将解释 Scala 代码 。但是,即使您不熟悉 Scala,建议您至少熟悉 Java 语言。本文使用 Scala V2.7.5 进行开发。对于 Android 和 Scala 都提供了很好的 Eclipse 插件。本 文使用 Eclipse V3.4.2 和 Android Development Tools(ADT) V0.9.1 以及 Scala IDE 插件 V2.7.5。

设置

编写 Android 应用程序听起来像是一个复杂的命题。Android 应用程序在它 们自己的虚拟机中运行:Dalvik 虚拟机。但是,Android 应用程序的构建路径 是开放的。下面表明了我们将使用的基本策略。

图 1. Android 上 Scala 的构建路径

其思想是,我们首先将所有 Scala 代码编译成 Java 类文件。这是 Scala 编译器的工作,所以这方面没什么太复杂的事情。接下来,获取 Java 类文件, 使用 Android dex 编译器将类文件编译成 Android 设备上的 Dalvik VM 使用 的格式。这就是所谓的 dexing,也是 Android 应用程序的常规编译路径。通常 ,要经历从 .java 文件到 .class 文件再到 .dex 文件的过程。在本文,惟一 不同的是我们从 .scala 文件开始。最后,.dex 文件和其他应用程序资源被压 缩成一个 APK 文件,该文件可安装到 Android 设备上。

那么,如何让这一切发生?我们将使用 Eclipse 做大部分工作。但是,此外 还有一个较复杂的步骤:要让代码运行,还需要来自标准 Scala 库中的代码。 在典型的 Scala 安装中,这是 /lib/scala-library.jar 中一个单独的 JAR。 但是,这个 JAR 包括一些不受 Android 支持的代码。有些代码需要稍作调整, 有些代码则必须移除。scala-library.jar 的定制构建是运行得最好的,至少目 前是这样。我们将把这个 JAR 称作 Android 库 JAR。

有了这个 JAR,剩下的事情就很容易了。只需使用 Eclipse 的 ADT 插件创 建一个 Android 项目。然后将一个 Scala 特性(nature)添加到项目中。用前 面谈到的 Android 库替代标准的 Scala 库。最后,将输出目录添加到类路径中 。现在,可以开始了。主 Scala 站点对此有更详细的描述。现在,我们有了基 本的设置,接下来看看我们将使用 Scala 创建的 Android 应用程序。

UnitsConverter

现在,我们知道如何利用 Scala 代码,将它转换成将在 Android 设备上运 行的二进制格式,接下来可以使用 Scala 创建一个移动应用程序。我们将创建 的应用程序是一个简单的单位转换应用程序。通过这个应用程序可以方便地在英 制单位与公制单位之间来回转换。这是一个非常简单的应用程序,但是我们将看 到,即使是最简单的应用程序也可以从使用 Scala 中获益。我们首先看看 UnitsConverter 的布局元素。

创建布局

您也许对编写手机上运行的 Scala 感到兴奋,但是并非所有的移动开发编程 都应该用 Scala 或 Java 语言完成。Android SDK 提供了一种很好的方式,使 用基于 XML 的布局系统将用户界面代码与应用程序逻辑分离。我们来看看本文 中的应用程序的主要布局文件,如清单 1 所示。

清单 1. Converter 应用程序的主要布局

<?xml  version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"  android:layout_height="fill_parent"
   android:gravity="center_horizontal" android:padding="10px"
   >
   <TextView android:id="@+id/prompt_label"  android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/prompt_metric"/>
   <EditText android:id="@+id/amount"  android:layout_below="@id/prompt_label"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"/>
   <TextView android:id="@+id/uom_label"
     android:layout_below="@id/amount"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/uom"/>
   <Spinner android:id="@+id/uom_value"
     android:layout_below="@id/uom_label"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"/>
   <Button android:id="@+id/convert_button"
     android:layout_below="@id/uom_value"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@string/convert_button_label"/>
   <TextView android:id="@+id/result_value"
     android:layout_below="@id/convert_button"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"/>
</RelativeLayout>

时间: 2024-08-30 13:53:10

手机上的Scala的相关文章

PC使用wireshark直接查看android手机上tcpdump捕捉到的数据包

在进行网络状况分析的时候,tcpdump和wireshark是必不可少的工具,手机上进行网络分析也是如此.在此之前,我都是在手机上使用tcpdump抓包之后,保存成一个.pacp文件,之后再在PC上使用wireshark来进行分析.在看到了参考网站中的内容之后,发现其实还有更加简便的方法,通过adb foward的功能,可以直接将手机上的tcpdump抓包结果通过USB发送到电脑,电脑上可以直接使用wireshark进行查看.具体步骤包括有 一.下载需要的文件包括 tcpdump-arm:可以在

求安卓手机上LED灯实现开关,闪动和调节亮度的源代码和功能说明文档

问题描述 求安卓手机上LED灯实现开关,闪动和调节亮度的源代码和功能说明文档 求安卓手机上LED灯实现开关,闪动和调节亮度的源代码和功能说明文档 解决方案 led?闪光灯?这个需要使用通知广播处理

有没有办法用行车记录仪的数据(天气的情况,如大雾)通过3g或者4g网络,通过app传送到指定的手机上

问题描述 有没有办法用行车记录仪的数据(天气的情况,如大雾)通过3g或者4g网络,通过app传送到指定的手机上 有没有办法用行车记录仪的数据(天气的情况,如大雾)通过3g或者4g网络,通过app传送到指定的手机上. 解决方案 复制出来再上传 解决方案二: 什么行车记录仪那么牛,还能记录大雾这样的天气数据?

apk 下载安装-Android的APP(APK)怎么才能方便的安装到用户手机上?

问题描述 Android的APP(APK)怎么才能方便的安装到用户手机上? 各位高人,Android的APP(APK)怎么才能方便的安装到用户手机上?放在网上下载的话,我发现现在微信也好,手机的浏览器也好(应该是考虑到用户安全),下载APK后会阻止自动安装.对于一些小白用户,即便做了二维码让他们扫描下载,下载到手机上后,并不会开始下一步自动开始安装.扫描后,就没后来了.这个问题有没有什么好办法解决? 解决方案 在现在的一些浏览器中是可以用辅助功能进行静默安装的但这样的行为取决于用户的启用如果想帮

htc qq登陆-关于android 在HTC手机上QQ第三方账号登陆

问题描述 关于android 在HTC手机上QQ第三方账号登陆 在HTC手机上QQ第三方账号登陆时,自己写的登陆页面会被重新启动好几次,大神,请问怎么回事?

rtmp-安卓手机上vlc播放器优化

问题描述 安卓手机上vlc播放器优化 vlc播放自己的直播摄像网络视频,一开始我们改进后从点击到画面显示最快速度可以到2秒内启动,但是后来发现两个问题: 1.没有声音播放出来 2.随着播放时间越久延时越来越厉害 为了解决这两个问题,改进之后启动就需要7秒左右了,请问哪位大神能优化启动速到在3秒左右或者更短,前提是保证有声音和延时没太大问题 解决方案 我做的在VLC上的二次开发,用开播放网络监控视频也是遇到了播放延时很严重的问题,针对这个问题我现在的想法是对VLC的解码进行优化,具体怎么做还没开始

如何能再iphone手机上玩flash游戏

问题描述 如何能再iphone手机上玩flash游戏 在不越狱的前提下,怎么才能让iphone手机可以玩flash游戏?如何能实现这个功能?希望知道的可以回答下,谢谢! 解决方案 http://tech.sina.com.cn/t/2010-12-01/06434927816.shtml 你可以去参考下

android开发-同一个手机上,如何把手势密码设置信息和用户绑定?

问题描述 同一个手机上,如何把手势密码设置信息和用户绑定? 有的用户设置了手势密码,有的用户没有设置密码,不同用户切换时如何保存这个状态 解决方案 设一个变量设置为true 没设置为false分别处理就是了

兼容性-安卓开发:在大屏手机上,用百度地图添加覆盖物,点击的位置总是发生偏移,怎么办

问题描述 安卓开发:在大屏手机上,用百度地图添加覆盖物,点击的位置总是发生偏移,怎么办 public boolean onTouchEvent(final MotionEvent event) { // 获得屏幕点击的位置 int x = (int) event.getX(); int y = (int) event.getY(); // 将像素坐标转为地址坐标 Projection proj = mMapView.getProjection(); pt = proj.fromPixels(x,