Android笔记——我的Android课的开始
android 最底层的是什么?
硬件
介于硬件与软件之间的一个交互,你猜猜需要什么?
软件的上面一层便是各种的类库
硬件与软件之间的交互,就是需要驱动的进行。
1.android系统架构
1.Linux内核层,android系统是基于linux2.6内核的
2.系统运行库层,这一层通过一些c/c++库来为android系统提供了主要的特性支持
3.应用框架层,这一层提供了构建应用程序时可能用到的各种api
4.应用层,所有安装在手机上的应用都是属于这一层
2.android的四大组件:Activity活动,Service服务,BroadcastReceive广播接收器,ContentProvider内容提供者。
3.创建一个helloworld的android应用程序
目录分析:
1.src:放置我们所有Java代码的地方
2.gen:这个目录是自动生成的,主要有一个R.java文件,在你的项目中添加的任何资源都会在其中生成一个相应的资源id。这个文件永远不要手动去修改它。
3.assets:主要可以存放一些随程序打包的文件,在你的程序运行时,可以动态的读取这些文件的内容。另外,如果你的程序中使用到了WebView加载本地网页的功能,所有网页相关的文件也都存放在这个目录下。
4.bin:它主要包含了一些在编译时自动产生的文件。
5.libs:如果你的项目中使用到第三方jar包,就需要把这些jar包都放在libs目录下面,放在这个目录下面的jar包都会自动添加到构建路径里去。
6. res:所有用到的图片,布局,字符串等资源都放在这个目录下面
7.AndroidMainfest.xml:这是android项目的配置文件,程序中定义的所有四大组件都需要在这个文件中注册。另外还可以在这个文件里给应用程序添加权限的声明,也可以重写指定你创建时指定的程序最低兼容版本和目标版本。
8.project.properties:这个文件非常地简单,就是一行代码指定编译程序时所使用的SDK版本。
4.使用Android的日志工具Log
Log.v()这个方法用于打印那些最琐碎的,意义最小的日志。对应级别verbose,是android日志里面级别最低的一种
Log.d()打印一些调试信息,这些信息有助于调试程序和分析问题对应级别是debug
Log.i()用于打印应一些比较重要的数据,这些数据应该是你非常想看到的,可以帮助你分析用户行为的那种,对应级别为info
Log.w()打印警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下,这些出现警告的地方,对应级别为war
Log.e()用于打印程序中的错误信息,这一般代表你的程序出现了严重的问题,必须尽快的修复,对应级别为error
日志的具体在后面的文章中说明。
1.拷贝
D:\Java\jdk1.8.0_91
2.配置环境变量
JAVA_HOME=D:\Java\jdk1.8.0_91
CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar
PATH=D:\Java\jdk1.8.0_91\bin;原来的
3.校验
随便目录运行 java -version
二、运行eclipse ADT (不用安装)
1.配置一个环境变量ANDROID_HOME=D:\Java\adt-bundle-windows-x86_64-20140702\sdk
2.直接运行eclipse.exe
三、下载海马模拟器
//定位textView 这个控件
TextView tv1=(TextView) this.findViewById(R.id.textView1);
tv1.setText("你好,Android1班");

7.分析
接下来我们一起分析一下 HelloWorld 项目究竟是怎么运行起来的吧。首先打开
AndroidManifest.xml 文件,从中可以找到如下代码:
<activity
android:name="com.test.helloworld.HelloWorldActivity" android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </activity>
这段代码表示对 HelloWorldActivity 这个活动进行注册,没有在 AndroidManifest.xml 里注册的活动是不能使用的。其中 intent-filter 里的两行代码非常重要,<action android:name= "android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />
表示 HelloWorldActivity 是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。
那 HelloWorldActivity 具体又有什么作用呢?我在介绍 Android 四大组件的时候说过,
活动是 Android 应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。因此你在图 1.15 中看到的界面,其实就是 HelloWorldActivity 这个活动。那我们快去看一下它的代码吧,打开 HelloWorldActivity,代码如下所示:
public class HelloWorldActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hello_world_layout);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.hello_world, menu);
return true;
}
}
首先我们可以看到,HelloWorldActivity 是继承自 Activity 的。Activity 是 Android 系统提供的一个活动基类,我们项目中所有的活动都必须要继承它才能拥有活动的特性。然后可以看到 HelloWorldActivity 中有两个方法,onCreateOptionsMenu()这个方法是用于创建菜单的,我们可以先无视它,主要看下 onCreate()方法。onCreate()方法是一个活动被创建时必定要执行的方法,其中只有两行代码,并且没有Hello world!的字样。那么图1.15 中显示的Hello world! 是在哪里定义的呢?
其实 Android 程序的设计讲究逻辑和视图分离,因此是不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。你可以看到,在onCreate()方法的第二行调用了 setContentView()方法,就是这个方法给当前的活动引入了一个 hello_world_layout 布局,那 Hello world!一定就是在这里定义的了!我们快打开这个文件看一看。
布局文件都是定义在 res/layout 目录下的,当你展开 layout 目录,你会看到 hello_world_layout.xml 这个文件。打开之后代码如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".HelloWorldActivity" >
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" />
</RelativeLayout>
| Android项目的目录结构 | |
| Activity | 应用被打开时显示的界面 |
| src | 项目代码 |
| R.java | 项目中所有资源文件的资源id |
| Android.jar | Android的jar包,导入此包方可使用Android的api |
| libs | 导入第三方jar包 |
| assets | 存放资源文件,比方说mp3、视频文件 |
| bin | 存放编译打包后的文件 |
| res | 存放资源文件,存放在此文件夹下的所有资源文件都会生成资源id |
| drawable | 存放图片资源 |
| layout | 存放布局文件,把布局文件通过资源id指定给activity,界面就会显示出该布局文件定义的布局 |
| menu | 定义菜单的样式 |
| String.xml | 存放字符串资源,每个资源都会有一个资源id |
1.android系统架构
1.Linux内核层,android系统是基于linux2.6内核的
2.系统运行库层,这一层通过一些c/c++库来为android系统提供了主要的特性支持
3.应用框架层,这一层提供了构建应用程序时可能用到的各种api
4.应用层,所有安装在手机上的应用都是属于这一层
2.android的四大组件:Activity活动,Service服务,BroadcastReceive广播接收器,ContentProvider内容提供者。
3.创建一个helloworld的android应用程序
目录分析:
src:放置我们所有Java代码的地方
gen:这个目录是自动生成的,主要有一个R.java文件,在你的项目中添加的任何资源都会在其中生成一个相应的资源id。这个文件永远不要手动去修改它。
assets:主要可以存放一些随程序打包的文件,在你的程序运行时,可以动态的读取这些文件的内容。另外,如果你的程序中使用到了WebView加载本地网页的功能,所有网页相关的文件也都存放在这个目录下。
bin:它主要包含了一些在编译时自动产生的文件。
libs:如果你的项目中使用到第三方jar包,就需要把这些jar包都放在libs目录下面,放在这个目录下面的jar包都会自动添加到构建路径里去。
res:所有用到的图片,布局,字符串等资源都放在这个目录下面
AndroidMainfest.xml:这是android项目的配置文件,程序中定义的所有四大组件都需要在这个文件中注册。另外还可以在这个文件里给应用程序添加权限的声明,也可以重写指定你创建时指定的程序最低兼容版本和目标版本。
project.properties:就是一行代码指定编译程序时所使用的SDK版本。
4.使用Android的日志工具Log
Log.v()这个方法用于打印那些最琐碎的,意义最小的日志。对应级别verbose,是android日志里面级别最低的一种
Log.d()打印一些调试信息,这些信息有助于调试程序和分析问题对应级别是debug
Log.i()用于打印应一些比较重要的数据,这些数据应该是你非常想看到的,可以帮助你分析用户行为的那种,对应级别为info
Log.w()打印警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下,这些出现警告的地方,对应级别为war
Log.e()用于打印程序中的错误信息,这一般代表你的程序出现了严重的问题,必须尽快的修复,对应级别为error
日志的具体在后面的文章中说明。
Android笔记——我的Android课的开始的更多相关文章
- Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)
就好像演电影一样,播放实现准备好的图片,来实现动画效果. 逐帧动画需要用到AnimationDrawable类,该类主要用于创建一个逐帧动画,然后我们把这个动画设置为view的背景即可. androi ...
- Android笔记:调试android程序
1.Debug 第一步: 添加断点 第二步: 右击项目→Debug As→Android Application //之后一个对话框出现,一会自动消失 第三步: 执行手机端操作,Eclipse 就会 ...
- Android笔记(七十三) Android权限问题整理 非常全面
Android权限系统非常庞大,我们在Android系统中做任何操作都需要首先获取Android系统权限,本文记录了所有的Android权限问题,整理一下分享给大家. 访问登记属性 android.p ...
- 【Android开发学习笔记】【第九课】重力感应
概念 使用重力感应技术的Android游戏已经屡见不鲜,不知道自己以后会不会用到,所以先研究了一下. 在网上学习了一下,貌似没有api,所以得自己去分析手机处在怎样状态下.注意: 下面提供的demo程 ...
- Android笔记——Android中数据的存储方式(三)
Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...
- Android笔记——Android中数据的存储方式(二)
我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...
- Android笔记:触摸事件的分析与总结----TouchEvent处理机制
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://glblong.blog.51cto.com/3058613/1559320 ...
- Android笔记一.深入理解Intent和IntentFilters(一)
深入理解Intent和IntentFiler(一) 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 为了比較深刻的理解并灵活使用Inten ...
- Android OpenGL教程-第六课【转】
第六课 纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 激动的时刻来了,加载图片了. 复习一下android加载图片的知识.放一个png到drawable里面. (图片文件名:ne ...
随机推荐
- 对偶理论、拉格朗日对偶问题、LP线性规划对偶性质
Lagrange 对偶问题 定义其的对偶问题: Lagrange函数 考虑线性规划问题 若取集合约束D={x|x≥0},则该线性规划问题的Lagrange函数为 线性规划的对偶问题为: 对偶定理原问题 ...
- RedHat Enterprise Linux 7关闭防火墙方法
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起 在之前的版本中关闭防火墙等服务的命令是 service iptables stop ...
- 微信分享接口SDK简介使用
很久没做移动端活动了,想不少人都参与过微信里面的活动,既然活动就少不了分享.那我就行一个前端的角度说说如何实现微信分享的吧. 对应微信分享,现在已有公共接口,微信的开发者文档SDK:https://m ...
- 关于合并“.a”文件时遇到的问题
今天在给工程添加百度地图SDK时,涉及到百度地图的模拟器与真机环境下的.a文件的合并,在使用终端进行 合并时,出现: xcrun: error: active developer path (&quo ...
- Javac 手动编译时,出现乱码或编码格式问题
使用Javac进行手动编译时,出现乱码或编码格式问题,原因如下:现象:编译时出现乱码或编译错误 即使改成UTF-8仍然会出错 原因如下:某些编辑器会往utf8文件中添加utf8标记(editplus称 ...
- [XAF] How to set List View Columns Title Customization align center?
https://www.devexpress.com/Support/Center/Question/Details/T423138
- TCP Fast Open
We know that Web services use the TCP protocol at the transport layer. Standard TCP protocol to thre ...
- sshd 错误
140669086946976:error:0E079065:configuration file routines:DEF_LOAD_BIO:missing equal sign:conf_def. ...
- 从MySQL5.7.6开始,安装MySQL提示“请键入 NET HELPMSG 3534 以获得更多的帮助”的解决办法
今天安装MySQL提示如下错误: ----------------------------------------------------------------------------------- ...
- windows下与linux下安装redis及redis扩展
1. Redis的介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起 ...