My Magic Android Tour —— 出世作

My Magic Android Tour —— 处女作

    最近考试什么的都已经结束了,闲在家也没什么事做,就想着学点什么,于是便选择了学一下Android开发。一直在使用Android手机,要是自己能为自己的手机开发一个APP就好了。

    好了,也不扯些废话了,开始Android之旅吧!不过出师必须要有名,由于是探索未知世界,我便取名叫“My Magic Android Tour”好了。

    由于之前做课程设计(完全是打酱油的)已经配置过环境之类的,这也是上次的唯一收获,其实也不太好,剥夺了我学习配置环境的机会,。哎,所以说“祸兮福所倚,福兮祸所伏”。额……,又扯远了。

    第一步:

    打开Eclipse,新建一个Android工程,此时需要填写工程相关信息,如下图。

My Magic Android Tour —— 出世作

    那么,这里的每一项是什么意思呢?将焦点分别移至每一项上面,可以总结出如下表格。
My Magic Android Tour —— 出世作
       按照上述表格,我填写各项信息如下。
My Magic Android Tour —— 出世作
       这里的Theme项只能选择None,如果选择其他主题,都会报错,原因是当前最低版本的SDK不支持这些主题。
    傻瓜式操作——Next,
My Magic Android Tour —— 出世作
    在这里就使用默认。Next,
My Magic Android Tour —— 出世作
    在这里是设置应用程序图标的,任然使用默认。Next,
My Magic Android Tour —— 出世作
    这里的Create Activity原来是选中的,但是报了错,依旧是SDK版本不支持。于是只好去掉,可是去掉之后,就不会在创建应用程序的时候自动生成一个Activity。当然,这并不是什么大问题,因为我可以手动去创建,还能学到不少呢!再一次验证了“祸兮福所倚,福兮祸所伏”这句话。
    在这里设置完成后,就可以点击Finish来完成应用程序的创建了。至此,我也完成了第一步。

    第二步:

    在某一本书上说:Android程序用XML文件来布局UI,用Java类来处理逻辑。

    于是,我们便创建一个XML文件,而且该XML文件必须要放在layout文件夹中。

My Magic Android Tour —— 出世作

   创建成功后,打开该XML文件,可以看到如下代码。

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

    第一个程序只为熟悉流程,不实现任何功能,所以,不修改XML文件任何地方。

    XML创建好后,需要创建一个Java类来加载该XML文件上的内容,但是此处的Java类是一个特殊的类,它必须继承自android.app.Activity类。

My Magic Android Tour —— 出世作

    创建好后,为了加载该XML文件,必须要重写onCreate方法,可以把它看做是普通Java程序中的main方法。

public class MainActivity extends Activity
{
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// Other Code……
	}
}

    至此,便完成了整个程序的编写,看来还是挺简单的嘛!

    接下来的工作就是要将程序跑起来。

      第三步:

    为了将程序跑起来,我们必须要启动模拟器。由于第一次编写Android应用,所以必须先新建一个模拟器。在Eclipse的工具条上单击按钮My Magic Android Tour —— 出世作,此时可以看到一个模拟器都不存在。所以要New一个。

My Magic Android Tour —— 出世作

    按要求填写各项信息,然后确定。

My Magic Android Tour —— 出世作

    OK,接下来,启动刚才创建好的模拟器就行了。

My Magic Android Tour —— 出世作

    还挺像一部手机的嘛,难怪叫模拟器呢!好了,不说废话了,运行程序吧。

My Magic Android Tour —— 出世作

    点击之后,等了好大一会,可是一点反应都没有,于是,翻书、百度。哦,原来是没有注册刚才写的Activity类。

    打开清单文件AndroidManifest.xml,注册MainActivity类。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tour.magic.helloandroid"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="19" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- 在此处注册Activity类 -->
        <activity android:name="MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
    再次运行,会发现应用程序还没跑起来就挂掉了。

My Magic Android Tour —— 出世作

    到底是什么原因呢,于是带着这个问题去百度,有人说打开Logcat查看具体原因,我变照着做了,看到如下原因。

My Magic Android Tour —— 出世作

    从上诉原因中看到java.lang.ClassNotFoundException这个异常,为什么找不到类文件呢?它明明就在那里啊,带着这个问题继续百度。看到有人说要在配置文件中的语句<activity android:name="MainActivity" >中的MainActivity前面加一个'.'表示当前目录,我便加上去了。<activity android:name=".MainActivity" >,再次运行。会发现根本没什么用,依旧还是那个异常。

    这到底是哪里出问题了呢,此刻的我非常的焦急了,但是还是像个武林高手一样气沉丹田,慢慢地,冷静下来了,于是开始静静思考原因。首先,既然'.'表示当前目录,那么当前目录到底是什么呢?此时抬头看到45°角处写着package="tour.magic.helloandroid"。目录找着了,在就看该目录下到底有没有类文件。切换到src下,惊人地发现

My Magic Android Tour —— 出世作

    哦,原来我的MainActivity类在默认包中,难怪呢,大哥,您干嘛要躲在这儿呢?害得我真惨啊!

    好了,问题总算是找着了,接下来就是要解决它。粗略一想,有3种方案。

    第一种:在src下新建一个tour.magic.helloandroid包,然后将MainActivity类移到这个包下;

    第二种:在注册MainActivity是带上其所在包名;

    第三种:将清单文件中package="tour.magic.helloandroid"后面的值改为MainActivity所在包名。

    仔细考虑了一下,后面两种不可取。原因如下:

    对于第二种,带上包名,可是我的类在默认包中啊,Java从1.4版本开始就不支持导入默认包中的类了[见附录1]。当然也可以新建一个不同于第一种解决方案中包,将类移进去,这样在那些需要很多包的程序中是挺好的,但是在本程序中,完全没有必要这么麻烦,安装第一种解决方案中就可以了。

    对于第三种,修改清单文件这里的包名,由于整个应用程序只有这一个清单文件,那么就有可能因为修改了此处的包名而影响其他地方,不值得冒这个险。

    于是,便采用方案一来解决。

My Magic Android Tour —— 出世作

    再次运行程序,看到程序总算可以跑起来了,真是有些小小的激动。My Magic Android Tour —— 出世作My Magic Android Tour —— 出世作My Magic Android Tour —— 出世作

My Magic Android Tour —— 出世作

 

    OK,下面来总结一下整个流程。

My Magic Android Tour —— 出世作

    写到此处,My Magic Android Tour处女作也快接近尾声了,第一次怎么大篇幅地写一篇文章。不过既然已经开了头,那么就继续坚持下去,每天将所学记录成文。在记录中成长,在分享中进步!


附录1:

    Java从JDK1.4就不在支持从默认包中导入类,这样做的目的我想应该是帮助开发者养成使用包名的好习惯。

My Magic Android Tour —— 出世作




版权声明:本文为博主原创文章,未经博主允许不得转载。