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


我与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事件的函数。

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="@string/question" />  
  11.   
  12.     <RadioGroup  
  13.         android:id="@+id/radioGroup1"  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="wrap_content" >  
  16.   
  17.         <RadioButton  
  18.             android:id="@+id/radio0"  
  19.             android:layout_width="wrap_content"  
  20.             android:layout_height="wrap_content"  
  21.             android:checked="true"  
  22.             android:text="小虾" />  
  23.   
  24.         <RadioButton  
  25.             android:id="@+id/radio1"  
  26.             android:layout_width="wrap_content"  
  27.             android:layout_height="wrap_content"  
  28.             android:text="iceboy" />  
  29.   
  30.         <RadioButton  
  31.             android:id="@+id/radio2"  
  32.             android:layout_width="wrap_content"  
  33.             android:layout_height="wrap_content"  
  34.             android:text="小白" />  
  35.     </RadioGroup>  
  36.   
  37.     <Button  
  38.         android:id="@+id/button1"  
  39.         android:layout_width="wrap_content"  
  40.         android:layout_height="wrap_content"  
  41.         android:text="确定"   
  42.         android:onClick="clickOK"/>  
  43.   
  44. </LinearLayout>  

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

完整的Activity代码如下:

  1. public class HelloAndroidActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         this.setContentView(R.layout.main);  
  7.     }  
  8.       
  9.     public void clickOK(View view){  
  10.         RadioGroup rg = (RadioGroup)findViewById(R.id.radioGroup1);  
  11.         int id = rg.getCheckedRadioButtonId();  
  12.         String text = "";  
  13.         switch(id){  
  14.         case R.id.radio0:  
  15.             text = "你太聪明了!";  
  16.             break;  
  17.         case R.id.radio1:  
  18.         case R.id.radio2:  
  19.             text = "你太愚昧了!";  
  20.             break;  
  21.         }  
  22.         new AlertDialog.Builder(this)  
  23.             .setTitle("结果")  
  24.             .setMessage(text)  
  25.             .setNeutralButton("Ok"new DialogInterface.OnClickListener() {  
  26.                 public void onClick(DialogInterface dialog, int which) {  
  27.                     dialog.dismiss();  
  28.                     HelloAndroidActivity.this.finish();  
  29.                 }  
  30.             }).show();  
  31.     }  
  32. }  

按钮事件由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开发笔记:编写运行第一个手机程序如此简单》有42个想法

  1. solu

    不错,希望把你们的开发过程都记录下来写成一系列的教程就好了。
    我也想学习Android的开发,写点小东西什么的。

    回复
    1. Xiaoxia 文章作者

      以后做android方面的开发,我尽量多写些文字说明吧。
      我也是需要什么才上网查找资料的,还没有时间看各种教程。

      回复
  2. samhjn

    Android-X86。。。怎么都感觉有点无语。。。
    更无语的是虚拟机竟然大胜模拟器。
    很奇怪为什么很少有人用vmware运行这个?vmware player不也是免费的?虽然我也是用Virtual Box跑的。

    回复
        1. Xiaoxia 文章作者

          你需要安装啥驱动呢???
          个人感觉,用这个虚拟镜像来做开发,其实很足够了呀~

          回复
    1. Xiaoxia 文章作者

      看了原来是视频教程啊!
      唉,还是有时间再关注一下吧。。。最近事情比较多。
      你知道如何在android上建立VPN?类似在2.3系统上实现4.0里面的API VpnService.Builder的功能?

      回复
    1. Xiaoxia 文章作者

      在PC上开发编译。然后在手机运行 🙂
      我在笔记本上写了个helloworld,arm gcc编译后放到手机上,可以运行。

      回复
    1. Xiaoxia 文章作者

      我这局部截图是在笔记本上的,eclipse是在官网下载的标准版本。可能你用的那个版本比较适合于大屏幕的吧。

      回复
  3. scola

    xiaoxia,你好,我想尝试在4.0+ 开发 vpn客户端,
    当时PPTP,L2tp这些都没有开放的接口,有一个vpnservice,需要自己实现vpn的细节。
    但是我不懂vpn的原理,和相关的网络协议,
    需要怎么入手。

    回复
  4. VellBibi

    呵呵,小虾也玩android啊。。。小弟我借机在这宣传一下我之前做的VellLock(单词锁屏)呗,百度一下:velllock有更多惊喜哦,呵呵,我的软件详解地址:http://bbs.hiapk.com/thread-4855551-1-1.html
    现在在豌豆荚上搜索VellLock可以直接下载的,欢迎试用哦。。。

    回复

回复 Xiaoxia 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据