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
日志的具体在后面的文章中说明。