My Magic Android Tour —— 处女作

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

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

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

第一步:

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

那么,这里的每一项是什么意思呢?将焦点分别移至每一项上面,可以总结出如下表格。

按照上述表格,我填写各项信息如下。

这里的Theme项只能选择None,如果选择其他主题,都会报错,原因是当前最低版本的SDK不支持这些主题。

傻瓜式操作——Next,

在这里就使用默认。Next,

在这里是设置应用程序图标的,任然使用默认。Next,

这里的Create Activity原来是选中的,但是报了错,依旧是SDK版本不支持。于是只好去掉,可是去掉之后,就不会在创建应用程序的时候自动生成一个Activity。当然,这并不是什么大问题,因为我可以手动去创建,还能学到不少呢!再一次验证了“祸兮福所倚,福兮祸所伏”这句话。

在这里设置完成后,就可以点击Finish来完成应用程序的创建了。至此,我也完成了第一步。

第二步:

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

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

创建成功后,打开该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类。

创建好后,为了加载该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的工具条上单击按钮,此时可以看到一个模拟器都不存在。所以要New一个。

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

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

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

点击之后,等了好大一会,可是一点反应都没有,于是,翻书、百度。哦,原来是没有注册刚才写的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>

再次运行,会发现应用程序还没跑起来就挂掉了。

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

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

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

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

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

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

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

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

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

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

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

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

再次运行程序,看到程序总算可以跑起来了,真是有些小小的激动。

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

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

附录1:

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



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

时间: 2024-08-09 02:21:14

My Magic Android Tour —— 处女作的相关文章

Mobile Matrices

This is an attempt to compile a list of relevant specifications for all modern smart phones and mobile internet devices. It is primarily for a quick reference sheet when trying to target a specific platform with CSS media queries. Apple: Model Operat

Magic in GFW &amp; Anti-GFW, just in order to work on Android AOSP.

Ok, let me say, I'm an Android BSP engineer in China Mainland. And as you know, for the one who wants to get in close touch with xxx.android.com or xxx.google.com just for work, it's hardly possible. This is a fxxxing bullshit, a really sad story and

android firmware 利用UDP socket发送Magic Packet

1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <unistd.h> 5 #include <sys/types.h> 6 #include <sys/stat.h> 7 #include <sys/socket.h> 8 #include <netinet/in.h> 9 #include <arpa

Android中的Handler, Looper, MessageQueue和Thread

Android中的Handler, Looper, MessageQueue和Thread 前几天,和同事探讨了一下Android中的消息机制,探究了消息的发送和接收过程以及与线程之间的关系.虽然我们经常使用这些基础的东西,但对于其内部原理的了解,能使我们更加容易.合理地架构系统,并避免一些低级错误. 对于这部分的内容,将分成4小节来描述: 1.职责与关系 2.消息循环 3.线程与更新 4.几点小结 ------------------------------------------------

Android逆向之旅---SO(ELF)文件格式详解

第一.前言 从今天开始我们正式开始Android的逆向之旅,关于逆向的相关知识,想必大家都不陌生了,逆向领域是一个充满挑战和神秘的领域.作为一名Android开发者,每个人都想去探索这个领域,因为一旦你破解了别人的内容,成就感肯定爆棚,不过相反的是,我们不仅要研究破解之道,也要研究加密之道,因为加密和破解是相生相克的.但是我们在破解的过程中可能最头疼的是native层,也就是so文件的破解.所以我们先来详细了解一下so文件的内容下面就来看看我们今天所要介绍的内容.今天我们先来介绍一下elf文件的

深入理解Android NDK日志符号化

为了进行代码及产品保护,几乎所有的非开源App都会进行代码混淆,这样当收集到崩溃信息后,就需 要进行符号化来还原代码信息,以便开发者可以定位Bug.基于使用SDK和NDK的不同,Android的崩溃分为两类:Java崩溃和C/C++崩溃.Java崩溃通过mapping.txt文件进行符号化,比较简单直观,而C/C++崩溃的符号化则需要使用Google自带的一些NDK工具,比如ndk-stack.addr2line.objdump等.本文不去讨论如何使用这些工具,有兴趣的朋友可以参考同事写的另一篇

【转】高通平台android 环境配置编译及开发经验总结

原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流程分析 qcril 流程分析,设置sim卡锁 python scons 语法学习 Python 语言之 scons 工具流程分析: 1.2 搭建高通平台环境开发环境 高通and

android apk 防止反编译技术第二篇-运行时修改字节码

上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止apk反编译的技术-运行时修改字节码.这种方法是在工作中在实现app wrapping时,看到国外的一篇关于android 安全的介绍实现的并且独创.下面我们来介绍一下这种方法. 我们知道apk生成后所有的java生成的class文件都被dx命令整合成了一个classes.dex文件,当apk运行时d

Android开源库--PhotoView图片查看

如果说我比别人看得更远些,那是因为我站在了巨人的肩上. github地址:https://github.com/chrisbanes/PhotoView 介绍 在一般的应用中,总会遇到查看图片的功能,点击图片之后,详细查看,PhotoView这个开源控件就帮我们很好的完成了这个功能. 它继承自ImageView,支持缩放,以及各种手势的监听. 特性 通过多点触摸和双击来进行放大. 通过轻弹划实现平滑滚动. 在带有滚动功能的父类工作的很好(比如ViewPager) 允许当显示的矩阵发生发生改变时通