从零开始写第一个Android应用程序
学习Android准备知识
安卓四层系统构成:
- 第一层:最底层 Linux层
- 第二层:函数库层 由C或者C++写
- 第三层:Application FrameWork 应用框架层
- 第四层:最上层 应用层
在很久以前,安卓还是用的jvm虚拟机,但是好景不长,赚了钱的google因为版权问题被sun公司告了。
sun公司提出和解的条件就是每年给他在这个项目上10%的收益。这怎么能够行呢??google每年都在这个项目上都会有很大一笔收益。就这样看着这么多钱分给sun怎么行???
于是,google独立开发了另外一个虚拟机,名字叫做dvm (Dalvik vm,Dalvik虚拟机)。
JVM与dvm的区别:
JVM:
- 编译后的文件格式:.java->.class->.jar
- 基于的架构: 基于栈的架构
dvm:
- 编译后的文件格式:.java->.class->.dex->.odex
- 基于的架构:基于寄存器的架构(基于寄存器的架构明显比基于栈的架构快,寄存器是cup上的一个高速存储部件)
但是,就算这样google还是败诉了,因为dvm上用了8行左右的java代码。
ART模式
- ART是Android Runtime的简称。
学习安卓不得不说的就是ART模式,这可是能够和IOS抗衡的一个基石。
它与传统Dalvik模式的区别:
Dalvik模式:
- 在4.4以前安卓应用程序都在Dalvik模式的虚拟机上面运行。这种编译模式是还要依靠一个编译器来实现与应用程序沟通。
- 应用程序每次运行时都需要将程序内的代码转换为机器码才能够运行。
- 这种无形中附加的一道手续就加快了耗电较快,占用内存较大,就算高性能手机用久了也会出现卡顿。
ART模式:
- 相对于ART模式,就很好的解决了这个问题。在安装应用程序时,自动对程序代码进行了预读取编译,让程序内的代码直接编译成机器语言,免去了Dalvik模式的要时时转换代码,实现了高效率,省电,占用更低的系统内存,手机运行流畅。
- 但是凡事都有两面性,ART解决了该问题的同时,也会有占用略高的存储空间,注意是存储空间,而不是运行内存,安装程序时要相对普通Dalvik模式要长一些时间来实现预编译。
安装Android编程软件:
这里笔者用的最古老的Android编程软件,eclipse(下载地址),很多人都说google已经出了自己的亲儿子了Android Studio。但是由于笔者的老师用的是eclipse,所以这也就没有办法了。后续我会更新怎样安装Android Studio的相关文章。
安装方法:
- 直接下载这个zip文件,直接解压并且安装好jdk就能够使用。
这里说一下重要的集成环境文件:
在sdk->platform-tools中
- dx.bat是把所有.class文件编译成.dex文件的工具
- aapt.exe(Android Application Package tools安卓应用打包工具)
- adb.exe(Android Debug Bridge 安卓调试桥,能够在电脑上对手机进行应用的安装卸载等)
在sdk->platform中
- 存放的都是一些安卓平台的版本,17版本是安卓4.2
创建第一个安卓应用程序Hello World
- 右键点击创建一个安卓应用程序:
接下来一路Next!!
接下来就是运行!!
介绍安卓应用程序目录结构:
继第一个安卓应用程序之后,我们来了解一下安卓的工程目录结构:
- bin:编译之后产生,内含apk
- src:存源代码
- gen:在gen下面有一个非常重要的文件就是R.java文件,这个文件相当于一个资源字典,但是这个资源字典只能够查到res中的资源,却不能够查到assets中的文件
- assets:专业名词叫做资产目录,这里存一些音频视频的资源文件或者一些xml文件等,基本上很多东西都可以放。
- libs这里面放一些额外的jar包。
- res:
res是放资源的目录,这里面主要放图片资源(屏幕适配用的),布局资源,字符串等。
下面讲解res下面的一些存储目录:
drawable:放图片资源,你会发现有很多drawable开头的文件夹,这些文件夹是放不同图片做屏幕适配用的。
layout:里面放一些布局文件,通常是xml类型的文件。
menu:menu就对应主菜单键,能够配置主菜单的文件。
values:values放一些字符串、颜色、styles。但是具体的values开头的文件夹也有很多,要想加字符串就加到第一个values中就行了。
AndroidManifest.xml:在所有的文件夹后面有一个AndroidManifest.xml文件,这个文件的重要性和我们JavaWeb中的web.xml差不多,AndroidManifest.xml一般配置四大组件、访问权限等整体属性。专业名称叫做清单文件。
那么既然AndroidManifest.xml如此重要就看看AndroidManifest.xml的一些内容吧。
首先从文件的开始你会看到:
android:versionCode:这个是版本的版本。这个字符串是不会显示给用户的一般是整数数值。
android:versionName:是对当前版本的描述。会被提取出来显示给用户。
android:minSdkVersion:允许最低的运行环境是多少,这里的值就是我们创建项目时设置的最低运行环境的值。
android:targetSdkVersion:目标运行环境,我的理解就是,targetSdkVersion是,如果这个版本还没有出来就是可以设置的,到了这个版本出来的时候就可以选择目标版本来运行你的应用程序。但是你也不能够盲目的设置。因为如果这个版本取消了某些类,可能你的应用程序就报废了。一般建议就设置到最新版本之后包括最新版本就行了。
接下来的标签application代表当前的应用。
在application标签里面有一些属性。
android:allowBackup代表是否可以备份应用程序的数据。一般我建议涉及很机密的应用程序不要设置这个值为true,因为如果可以进行备份了。那么如果其他人获取到了我们的备份数据,别人就可以在其它安卓设备上或者安卓虚拟机上边安装同款应用,并且同步这些数据到应用就可以查看你的聊天记录,或者关于金融方面的一些东西。因为这个时候你的应用状态被同步后就相当于被备份的时候。
android:icon:是指应用程序的图标。
android:label是指应用程序的名称。
android:theme代表应用程序主题的意思。
OK!!!
从零开始写第一个Android应用程序相关推荐
- android 程序闪退 log,写了一个android小程序,测试的时候闪退,然鹅log并没有报错...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 layout是这样写的: xmlns:app="http://schemas.android.com/apk/res-auto" xm ...
- android如何写第一个程序,第一个Android应用程序
**文章摘要 ** 1.熟悉第一个Android应用程序的创建,以及创建过程中的各个文件夹的意义. 2.熟悉Android界面之间的跳转方式. 一.关于开发工具: 1.开发工具(Eclipse.And ...
- 在纸上写好一个c语言程序后,上机运行的基本步骤为,c基本概念(选择题).docx
PAGE / NUMPAGES 一.单选题 1.下面叙述中正确的是: (A) 在C语言程序中,main()函数必须放在程序的开始位置 (B) 在C语言程序中,要调用的函数必须在main()函数中定义 ...
- 分享下自己写的一个微信小程序请求远程数据加载到页面的代码
分享下自己写的一个微信小程序请求远程数据加载到页面的代码 1 思路整理 就是页面加载完毕的时候 请求远程接口,然后把数据赋值给页面的变量 ,然后列表循环 2 js相关代码 我是改的 onload ...
- c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...
求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束 /* 以下是主要的逻辑代码,还有些.c和.h就没发了 ...
- IOS学习笔记04---编写第一个C语言程序-Hello World
IOS学习笔记04---编写第一个C语言程序-Hello World -------------------------------------------------------- ...
- 从零开始写第一个Flutter app(八)——修改主题颜色
目录 从零开始写第一个Flutter app(一)--Hello World 从零开始写第一个Flutter app(二)--引用第三方包 从零开始写第一个Flutter app(三)--有状态的部件 ...
- 手把手教你写第一个C语言程序
C语言是所有编程语言的基础,历经50多年的发展依然被众多编程者使用,那么怎么写C语言程序呢?下面我将从项目的创建开始一步步交大家写第一个C语言程序. 一.C语言项目的创建: C语言是一门编译型语言.所 ...
- 【c】C语言编程写的一个http下载程序
来自: 百度空间-软件工程师 大家都很熟悉HTTP协议的应用,因为每天都在网络上浏览着不少东西,也都知道是HTTP协议是相当简单的.每次用到FlashGet之类的下载软件下载网页,当用到那个" ...
最新文章
- (转)HLSL,函数列表
- android:descendantFocusability
- [译]以PostgreSQL为例,谈join计算的代价
- hibernate persist不能插入到表中
- Redis中的Cluster高可用和主从切换原理
- 软件工程---第四章---形式化分析
- POJ1163 数字三角形
- KICAD | 分享一个必须安装的插件Interactive HTML BOM plugin for KiCad
- 代码注释(图案:女孩儿)
- SqlSessionTemplate是如何保证MyBatis中SqlSession的线程安全的?
- c语言程序与设计第三版-苏小红--第一轮学习笔记、难点整理
- 如何在 Mac 上重命名 Apple Magic Mouse?
- 医用计算机app,App Store 上的“金融-计算器”
- IOS面试题(收集整理)
- win7计算机怎么找管理员,win7管理员身份运行
- 第二十四篇:SuperSpeed/HighSpeed USB的ISO传输
- c语言中写出int变量x为奇数,求C语言好的同学
- 【地图可视化】Echarts地图上展示3D柱体
- php 微信支付 回调处理,TP微信支付(回调处理)
- ctab提取dna流程图_CTAB法提取DNA简要步骤
热门文章
- win10锁屏幻灯片放映不能播放幻灯片问题的一种解决办法
- 【译】Linux不同的IO访问方式中,Scylla的选择和依据
- gazebo仿真时在加入差分运动插件后没有cmd_vel话题
- tf.squared_difference函数
- Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)
- linux上centos镜像磁盘,VirtualBox中配置linuxCentOS的本地磁盘镜像iso作为其软件源
- 计算机图形学学习笔记(4.1)画线算法
- 解决——zip压缩包解压后的文件全是乱码问题
- 农村饮用水项目微信支付完整代码
- NSSCTF部分复现