Android开发笔记:编写运行第一个手机程序如此简单

标签: Android android android-x86 eclipse java | 发表时间:2012-02-11 02:50 | 作者:Xiaoxia
出处:http://xiaoxia.org


我与Java

大二的时候,修过Java的选修课,考了90多分。虽说如此,但一直以来,我的Java水平仅停留在只会写一个简单的Hello world。可能是我对Java一向没有什么好感,平时也不会用到它!Kubuntu里的OpenJDK和Eclipse,都是为了交作业而安装的:)

开发环境配置

昨天就搭建好了Android开发环境了。我发现我之前安装的Eclipse Galileo版本是安装不了官网上下载的ADT插件的。所以,我被迫去Eclipse官网重新下载了最新的Eclipse Indigo Classic 3.7.1。问题解决了。另外,用OpenJDK代替Sun JDK完全没有问题!

开发环境的搭建参考官网的详细教程:

http://developer.android.com/sdk/installing.html

参考这篇教程,我在Android模拟器上成功运行了一个的Hello world:

http://developer.android.com/resources/tutorials/hello-world.html

一个选择题程序

在Hello world的基础上,稍加修改,做了一个简单的选择题程序。得益于Eclipse便捷的UI编辑工具,像堆砌积木一样,不到1分钟就做好了界面!请大家无视界面内容,以免影响你的情绪。

界面的XML配置内容如下,在按钮里,指定了响应onClick事件的函数。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/question" />

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="小虾" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="iceboy" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="小白" />
    </RadioGroup>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="确定"
        android:onClick="clickOK"/>

</LinearLayout>

在Activity代码里给按钮加入响应事件,打完代码,按Ctrl+Shift+O自动补全import,Eclipse的代码补全强大的惊人。

完整的Activity代码如下:

public class HelloAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.main);
    }

    public void clickOK(View view){
    	RadioGroup rg = (RadioGroup)findViewById(R.id.radioGroup1);
    	int id = rg.getCheckedRadioButtonId();
    	String text = "";
    	switch(id){
    	case R.id.radio0:
    		text = "你太聪明了!";
    		break;
    	case R.id.radio1:
    	case R.id.radio2:
    		text = "你太愚昧了!";
    		break;
    	}
    	new AlertDialog.Builder(this)
	    	.setTitle("结果")
	    	.setMessage(text)
	    	.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
	    		public void onClick(DialogInterface dialog, int which) {
	    			dialog.dismiss();
	    			HelloAndroidActivity.this.finish();
	    		}
	    	}).show();
    }
}

按钮事件由clickOK函数响应,判断RadioGroup中被选中的按钮ID,使用AlertDialog输出提示结果信息。

这个AlertDialog的show方法不会阻塞当前线程,而弹出的对话框的按钮响应事件是异步的。

使用Activity的this.finish();方法来退出程序。不过这样做好像没有结束进程,请教Java大牛,如果要结束进程,是使用System.exit()不?

模拟器运行

使用SDK自带的模拟器运行的效果:

手机运行

然后,我想试试放在手机上运行。一开始,我在Eclipse的菜单里,通过导出未签名的Package,用蓝牙传输到手机上,运行之后,提示“应用程序未安装”。十分奇怪,难道是因为没有签名???上网查了一下,看来就是这个原因!

我直接复制工程目录下bin下的apk文件到手机上,意料之中,运行成功!

Android-x86运行

另外,我把apk文件复制到了我的Android-x86虚拟机上!这个Android-x86比起java那个模拟器,速度相差太大了。大家可以看看:

java模拟器CPU一直是100%,导致我的笔记本风扇一直在高速运转。而在VirtualBox的Android-x86只用了1%的CPU。相差甚远!另外,Android-x86的开机速度非常之快。不过,我还是习惯使用Virtualbox的休眠功能,连开机过程都免了。

因为我还没有配置好Eclipse与虚拟机的连接,所以我这里用了另外一种方法来复制文件到x86的虚拟机里。非常实用!!!

在终端里切换到apk所在的目录下,然后运行

root@xiaoxia-pc:/java/HelloAndroid/bin# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

然后在虚拟机的Android里,输入网址 http://192.168.56.1:8000/

Android-x86里的运行效果:

相关 [android 开发 笔记] 推荐:

Android Native 代码开发学习笔记

- iDesperadO - WindStorm
本文提供排版更佳的PDF版本下载. JNI,全称Java Native Interface,是用于让运行在JVM中的Java代码和运行在JVM外的Native代码(主要是C或者C++)沟通的桥梁. 代码编写者即可以使用JNI从Java的程序中调用Native代码,又可以从Native程序中调用Java代码.

Android 应用开发笔记 - 拖动效果(Gallery)

- - CSDN博客推荐文章
新建一View,清单如下:.     在面板拖拽图标 ,然后更改相关属性(Properties),如下:.     整体布局效果如下:.    把“Push me”按钮,更改为切换按钮. 相关代码请参考 多个View切换.     实现Gallery需要继承BaseAdapter,我们命名为ImgAdapter.

Android 应用开发笔记 - 图片视图(ImageView)

- - CSDN博客推荐文章
我们接上一节内容,来讲解这个节内容. 1.首先,新建一Layout XML文件,如下图:. 然后,在面板拖拽 ,到 ,设置相关属性,. 2.首先新建一新class,如下图:. 然后,修改主控java(MainActivity.java):. 作者:xiaobin_HLJ80 发表于2012-9-16 1:07:46 原文链接.

Android开发笔记:编写运行第一个手机程序如此简单

- - Xiaoxia[PG]
大二的时候,修过Java的选修课,考了90多分. 虽说如此,但一直以来,我的Java水平仅停留在只会写一个简单的Hello world. 可能是我对Java一向没有什么好感,平时也不会用到它. Kubuntu里的OpenJDK和Eclipse,都是为了交作业而安装的:). 昨天就搭建好了Android开发环境了.

Android学习笔记(六)SQLite

- - 博客园_首页
SQLite是一个极轻量型的数据库. 它在提供了和大型数据库相当的功能,还具有轻便、跨平台等优点,SQLite使用非常方便,并不需要我们像常规数据库(SQLServer,Mysql等)那样进行安装,在Android的JDK中,其实是已经包含了SQLite这个数据库的核心. 当然我们必须要强调一点,SQLite并不是只针对Android的,其实它还可以用在别的很多地方.

Android开发Tips

- - CSDN博客推荐文章
欢迎Follow我的 GitHub, 关注我的 CSDN.. 介绍一些, 在Android开发中, 会经常使用的小知识点.. submodule与git可以保持实时同步. 导入, 路径多于一个, 前面不添加冒号(:).. 使用PackageManager.. // 检查App是否安装 private boolean appInstalledOrNot(String uri) {.

开发笔记(1)

- liuce.cn - 云风的 BLOG
折腾了好久,终于可以开始正式项目开发了. 之前的这段日子,我们陷落在公司的股权分配问题中,纠结于到底需要几个人到位才启动;更是反复讨论,到底应该做个怎样的游戏. 林林总总,终于,在已经到位的几位同学的摩拳擦掌中,叮当决定自己挂帅开始干了. 就这么不到十个人,空旷的办公室,跟我们起先想像的情况不太一样.

Android学习笔记之Gallery(2)

- - CSDN博客推荐文章
Toast.makeText(GalleryActivity.this, "点击了第"+arg2+"张图片", Toast.LENGTH_LONG).show();. // 给ImageView设置资源. // 设置布局 图片120*80. 创建一个新的XML文件在 res/values/目录下 attrs.xml命名.

Android学习笔记之布局

- - CSDN博客推荐文章
我们对Android应用程序运行原理及布局文件可谓有了比较深刻的认识和理解,并且用“Hello World. 在继续深入 Android开发之旅之前,有必要解决前两篇中没有介绍的遗留问题:View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍. View的布局显示方式有下面几种: 线性布局(Linear Layout)、 相对布局(Relative Layout)、 表格布局(Table Layout)、 网格视图(Grid View)、 标签布局(Tab Layout)、 列表视图(List View)、 绝对布局(AbsoluteLayout).

Google《Android性能优化》学习笔记

- - 外刊IT评论
现在有不少App为了达到很华丽的视觉效果,会需要在界面上层叠很多的视图组件,但是这会很容易引起性能问题. 如何平衡Design与Performance就很需要智慧了. 大多数手机的屏幕刷新频率是60hz,如果在1000/60=16.67ms内没有办法把这一帧的任务执行完毕,就会发生丢帧的现象. 丢帧越多,用户感受到的卡顿情况就越严重.