My Magic Android Tour —— 处女作
近期考试什么的都已经结束了,闲在家也没什么事做,就想着学点什么,于是便选择了学一下Android开发。一直在使用Android手机。要是自己能为自己的手机开发一个APP就好了。
好了,也不扯些废话了,開始Android之旅吧。只是出师必需要有名,因为是探索未知世界,我便取名叫“My Magic Android Tour”好了。
因为之前做课程设计(全然是打酱油的)已经配置过环境之类的,这也是上次的唯一收获,事实上也不太好,剥夺了我学习配置环境的机会,。哎,所以说“祸兮福所倚,福兮祸所伏”。额……,又扯远了。
第一步:
打开Eclipse,新建一个Androidproject,此时须要填写project相关信息。例如以下图。
于是仅仅好去掉,但是去掉之后,就不会在创建应用程序的时候自己主动生成一个Activity。
当然,这并非什么大问题,由于我能够手动去创建,还能学到不少呢。再一次验证了“祸兮福所倚,福兮祸所伏”这句话。
第二步:
在某一本书上说: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 —— 处女作的更多相关文章
- 解决Flutter boost模块化加入到原有android项目后,首次加载过慢的问题
由于Flutter boost目前还没有很好的解决方案,所以只能魔改了,大致的思路就是在刚打开app的时候就初始化一个不可见的Flutter页面,让其自动注册&初始化. 先编写一个Flutte ...
- Mobile Matrices
This is an attempt to compile a list of relevant specifications for all modern smart phones and mobi ...
- 自己整理的模拟爬虫的user-agent
自己经常用的一些爬虫用的user-agent头部 This XML file does not appear to have any style information associated with ...
- android firmware 利用UDP socket发送Magic Packet--python版本
android firmware 利用UDP socket发送Magic Packet--python版本 #!/usr/bin/python import sys, time from struct ...
- android firmware 利用UDP socket发送Magic Packet--c语言版本
android firmware 利用UDP socket发送Magic Packet 1 Magic Packet格式: 6个0xFF + 16个Dst Mac Address 2 代码需要设置目的 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【腾讯Bugly干货分享】Android Linker 与 SO 加壳技术
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57e3a3bc42eb88da6d4be143 作者:王赛 1. 前言 Andr ...
- Android 敏感 API 的说明
从中国的国情来看,Google 的诸多产品,包括 gmail,Android 官方市场 Google Play 正处于并将长期处于访问不了的状态.国内几亿网民也要生活,于是墙内出现了“百家争鸣”的场面 ...
- 为你的Android App实现自签名的 SSL 证书(转)
介绍 网络安全已成为大家最关心的问题. 如果你利用服务器存储客户资料, 那你应该考虑使用 SSL 加密客户跟服务器之间的通讯. 随着这几年手机应用迅速崛起. 黑客也开始向手机应用转移, 原因有下列3点 ...
随机推荐
- shader 4 杂 一些和函数名词、数据结构
Normal: 法线 Normao mapping: 法线贴图 Lighting mapping: 光照贴图 Bump mapping: 凹凸贴图:模拟粗糙外表面的技术. FX-Water ...
- Effective C++笔记03:资源管理
资源:动态分配的内存.文件描写叙述器.相互排斥锁.图形界面中的字型与笔刷.数据库连接以及网络sockets等,不管哪一种资源,重要的是,当你不再使用它时,必须将它还给系统. 条款13:以对象管理资源 ...
- MAC之查看日历
命令:cal 查看当前月份 命令: cal 04 2001 查看2001年的4月份 echo命令: 打印信息
- cubieboard 通过VGA点亮电脑屏幕笔记
前题:由于公司某些方面的需要,于是就开始尝试了来通过VGA输出--因为不可能每个地方都是高清电视,这是其一:如果要买一个HDMI转VGA的话,成本上就有所上升:反正吧,各种理由,都觉得直接通过VGA输 ...
- 混沌数学之Chua's circuit(蔡氏电路)
蔡氏电路(英语:Chua's circuit),一种简单的非线性电子电路设计,它可以表现出标准的混沌理论行为.在1983年,由蔡少棠教授发表,当时他正在日本早稻田大学担任访问学者[1].这个电路的制作 ...
- 我所遭遇过的游戏中间件--Apex
我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它 ...
- waf bypass
1.前言 去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常谈的话题也没什么可写的.很多人一遇到waf就发懵,不知如何是好,能搜到的各种姿势也是然并卵.但是积累姿势的过程也是迭代的 ...
- UVA 400 (13.08.05)
Unix ls The computer company you work for is introducing a brand new computer line and is developi ...
- relatedTarget、fromElement、toElement相关元素
在发生mouseover和mouseout事件时,还会涉及更多的元素.这两个事件都会涉及把鼠标指针从一个元素的边界之内移到另一个元素边界之内.对mouseover事件而言,事件的主目标是获得光标的元素 ...
- 【Django】Django如何保证并发操作数据一致性问题
代码示例: 使用 select for update 数据库查询 select ... for update 是数据库层面上专门用来解决并发取数据后再修改的场景的,主流的关系数据库 比如mysql.p ...