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

好了,也不扯些废话了,開始Android之旅吧。只是出师必需要有名,因为是探索未知世界,我便取名叫“My Magic Android Tour”好了。

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

第一步:

打开Eclipse,新建一个Androidproject,此时须要填写project相关信息。例如以下图。

    那么。这里的每一项是什么意思呢?将焦点分别移至每一项上面,能够总结出例如以下表格。
       依照上述表格。我填写各项信息例如以下。
       这里的Theme项仅仅能选择None,假设选择其它主题,都会报错,原因是当前最低版本号的SDK不支持这些主题。
    傻瓜式操作——Next,
    在这里就使用默认。Next,
    在这里是设置应用程序图标的,任然使用默认。Next,
    这里的Create Activity原来是选中的,但是报了错,依然是SDK版本号不支持。

于是仅仅好去掉,但是去掉之后,就不会在创建应用程序的时候自己主动生成一个Activity。

当然,这并非什么大问题,由于我能够手动去创建,还能学到不少呢。再一次验证了“祸兮福所倚,福兮祸所伏”这句话。

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

第二步:

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

于是。我们便创建一个XML文件,并且该XML文件必需要放在layout目录中。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhbjYxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhbjYxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

创建好后。为了载入该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的工具条上单击button,此时能够看到一个模拟器都不存在。

所以要New一个。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhbjYxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhbjYxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

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。以下来总结一下整个流程。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhbjYxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

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

在记录中成长,在分享中进步!

附录1:

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




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

  1. 解决Flutter boost模块化加入到原有android项目后,首次加载过慢的问题

    由于Flutter boost目前还没有很好的解决方案,所以只能魔改了,大致的思路就是在刚打开app的时候就初始化一个不可见的Flutter页面,让其自动注册&初始化. 先编写一个Flutte ...

  2. Mobile Matrices

    This is an attempt to compile a list of relevant specifications for all modern smart phones and mobi ...

  3. 自己整理的模拟爬虫的user-agent

    自己经常用的一些爬虫用的user-agent头部 This XML file does not appear to have any style information associated with ...

  4. android firmware 利用UDP socket发送Magic Packet--python版本

    android firmware 利用UDP socket发送Magic Packet--python版本 #!/usr/bin/python import sys, time from struct ...

  5. android firmware 利用UDP socket发送Magic Packet--c语言版本

    android firmware 利用UDP socket发送Magic Packet 1 Magic Packet格式: 6个0xFF + 16个Dst Mac Address 2 代码需要设置目的 ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【腾讯Bugly干货分享】Android Linker 与 SO 加壳技术

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57e3a3bc42eb88da6d4be143 作者:王赛 1. 前言 Andr ...

  8. Android 敏感 API 的说明

    从中国的国情来看,Google 的诸多产品,包括 gmail,Android 官方市场 Google Play 正处于并将长期处于访问不了的状态.国内几亿网民也要生活,于是墙内出现了“百家争鸣”的场面 ...

  9. 为你的Android App实现自签名的 SSL 证书(转)

    介绍 网络安全已成为大家最关心的问题. 如果你利用服务器存储客户资料, 那你应该考虑使用 SSL 加密客户跟服务器之间的通讯. 随着这几年手机应用迅速崛起. 黑客也开始向手机应用转移, 原因有下列3点 ...

随机推荐

  1. XPROG-m编程器

    XPROG-m编程器是为取代较早版本的XPROG编程器而设计的. XPROG-m编程器硬件完全与XPROG编程器向上兼容,还具有其它许多功能. 该XPROG - M支持摩托罗拉68HC05,68HC0 ...

  2. Linux内核中container_of函数详解

    http://www.linuxidc.com/Linux/2016-08/134481.htm

  3. MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射

    本系列将使用zTree来创建.编辑关于品牌.车系.车型的无限级分类,使用datagrid显示,源码在github.先上最终效果: datagrid显示所有记录.分页,提供添加.修改.删除按钮,并提供简 ...

  4. 做iphone5适配时,一定要做好图片大小的调整。

  5. Peter Norvig:学习在于挑战和重复

    黄小非译注(本文来自伯乐在线):本文作者Peter Norvig目前任职于Google,其职位是研究主管(Director of  Research). Peter Norvig是享誉世界的计算机科学 ...

  6. Tomcat集群扩展session集中管理,Memcached-session-manager使用

    研究tomcat做负载均衡的时候如何实现ha,还有就是不采用session复制的方法做集群. 想到的是将session全部存储在后端的缓存服务器中. 正好网上有这么一个工具Memcached-sess ...

  7. oracle 日期相减 转载

      转自 http://hi.baidu.com/juanjuan_66/blog/item/cf48554c9331fbe6d62afc6a.html oracle日期相减2012-02-10 12 ...

  8. [PHP] ubuntu16.04下 Phpstorm发布项目到apache

    reference to : http://blog.csdn.net/qq_23937195/article/details/72953308 在网上找的不靠谱,倒腾了大半天的,终于找到正确姿势QA ...

  9. 【ContestHunter】【弱省胡策】【Round5】

    反演+FFT+构造+DP 写了这么多tag,其实我一个也不会 A 第一题是反演……数据范围10W,看着就有种要用FFT等神奇算法的感觉……然而蒟蒻并不会推公式,只好写了20+10分的暴力,然而特判30 ...

  10. kth-smallest-element-in-a-sorted-matrix

    //有很多讨论,比如 // https://discuss.leetcode.com/topic/52865/my-solution-using-binary-search-in-c // https ...