一、Android的系统架构
1.Linux内核层:为Android设备的各种硬件提供底层的驱动。
2.系统运行库层:通过C/C++库来为Android系统提供主要的特性支持。
例如:SQLite库提供了数据库的支持。
这一层还有Android运行时库,它主要提供一些核心库,能允许开发者使用Java语言来编写Android应用,其中还包括Dalvik虚拟机。
Dalvik虚拟机是专门为移动设备定制的。
3.应用框架层:提供了构建应用程序时可能用到的各种API。
4.应用层:所有安装在手机上的应用程序都是属于这一层的。
二、Android系统四大组件
1.活动(Activity):凡是应用中能看到的所有东西都在这里面。
2.服务(Service):无法看到他,在后台默默运行。
3.广播接收器(Broadcast Receiver):允许你的应用接收和发出广播消息。
4.内容提供器(Content Provider):为应用程序之间共享数据提供了可能。
三、分析HelloWorld项目究竟是怎么运行的?
1.没有注册的活动不能使用
//Manifest.xml文件
<activity android:name=".HelloWorldActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
//这段代码表示对HelloWorldActivity这个活动进行注册
//<action android:name="android.intent.action.MAIN"/>
//<category android:name="android.intent.category.LAUNCHER"/>
//这两句表示HelloWorldActivity是这个项目的主活动,点击手机应用程序图标,首先启动的就是这个活动
2.Android程序的设计讲究逻辑和视图分离,因此不推荐在活动中直接编写界面的,一般是在布局文件中编写界面,然后在活动中引入进来。
//HelloWorldActivity活动文件
public class HelloWorldActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle sacedInstanceState){
//onCreate方法是一个活动被创建时必定要执行的方法
super.onCreate(savedInstanceState);
//setContentView方法是给当前活动引入一个布局,layout就是一个布局
setContentView(R.layout.hello_world layout);
}
}
3.布局文件在res/layout目录下,TextView是Android系统提供的一个控件,在布局中显示文字的。
//hello_world_layout.xml文件
//这里主要学习
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" /> //用于在布局中显示文字
4.res目录下文件详解
1)drawable放图片
2)layout放布局文件
3)mipmap开头的放应用图标
4)values开头的放字符串、样式、颜色等配置
5.res目录下,values/strings.xml文件
1)在代码中可以通过R.string.app_name来获得该字符串的引用
2)在XML中通过@string/app_name可以获得该字符串的引用
//values/strings.xml文件
<resources>
//这里定义了一个应用程序名的字符串
<string name="app_name">HelloWorld</string>
</resources>
6.bulid目录下的是自动的编译文件,gradle目录包含了gradle wrapper的配置文件。
bulid.gradle是项目全局的gradle构建脚本。
1)Android Studio是采用Gradle来构建项目的。它是一种基于Groovy的领域特定语言(DSL),摒弃了传统基于XML的各种繁琐配置。
2)HelloWorld项目中有两个bulid.gradle文件,一个是在最外层目录下,一个是在app目录下
很多Android开源项目都会选择将代码托管到jcenter上,声明这个配置,我们就能轻松引用。
//最外层的bulid.gradle文件
bulidscript{
repositories{
jcenter() //jcenter是一个代码托管仓库
}
dependencies{
classpath 'com.android.tools.bulid:gradle:2.2.0' //这一句是声明Gradle插件
}
}
allprojects{
repositories{
jcenter()
}
}
7.app目录下的bulid.gradle文件
1)com.android.application表示这是一个应用程序模块;com.android.library表示这是一个库模块。
2)应用程序模块和库模块的区别在于:应用程序模块可以直接运行,库模块只能作为一个代码库依附于别的应用程序模块来运行。
//内部build.gradle文件
//表示这是一个应用程序模块
apply plugin:'com.android.application'
android{
//指定项目编译版本
compileSdkVersion 24
//指定项目构建工具版本
bulidToolsVersion "24.0.2"
//defaultConfig是对项目更多细节进行配置
defaultConfig{
//项目包名
applicationId "com.example.helloworld"
//最低兼容版本
minSdkVersion 15
//最大的测试过的兼容版本
targetSdkVersion 24
//项目版本号
versionCode 1
//项目版本名
versionName "1.0"
}
//bulidTypes是安装文件相关的配置
buildTypes{
//指定生成正式版安装文件的配置
release{
//是否对项目中的代码进行混淆
minifyEnabled false
//proguardFiles:混淆规则;
//proguard-android.txt:SDK目录下的通用混淆;
//proguard-rules.pro:当前目录下,可编写的混淆规则
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
}
//dependencies是指定当前项目所有的依赖关系
dependencies{
//本地声明依赖,将libs下的所有jar添加了
compile fileTree(dir:'libs',include:['*.jar'])
//远程声明依赖包:域名:组织名:版本号
complie 'com.android.support:appcompat-v7:2.2.1'
//测试用例库
testCompile 'junit:junit:4.12'
}
三、日志工具
1.日志工具类Log
1)Log.v():用于打印那些最为琐碎,意义最小的日志信息。verbose级别
2)Log.d():用于打印一些调试信息。debug级别
3)Log.i():用于打印一些比较重要的数据。info级别
4)Log.w():用于打印一些警告信息。warn级别
5)Log.e():用于打印程序中的一些错误信息。error
在onCreate()方法中添加一行打印日志的语句
//HelloWorldActivity活动文件
public class HelloWorldActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle sacedInstanceState){
//onCreate方法是一个活动被创建时必定要执行的方法
super.onCreate(savedInstanceState);
//setContentView方法是给当前活动引入一个布局,layout就是一个布局
setContentView(R.layout.hello_world layout);
//在onCreate()方法中添加一行打印日志的语句
Log.d("HelloWorldActivity","onCreate excute");
}
}