1. Android 系统架构
Android大致可以分为四层架构:Linux内核层、系统运行底层、应用框架层和应用层。
Linux内核层:
提供驱动:显示驱动、音频驱动、照相机驱动、蓝牙驱动、wifi驱动、电源管理等。
系统运行底层:
通过C/C++库来为Android系统提供了主要的特性支持:如SQLite库提供了数据库的支持,OpenGL/ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。
Android运行时库,提供了一些核心库,能够允许开发者运用java语言来编写Android应用(包含了Dalvik虚拟机(5.0系统之后改为ART运行环境))。
应用框架层:
提供了构建应用程序时可能用到的各种API,Android自带的核心应用就是使用这些API完成的。
应用层:
安装在手机上的各种应用程序都属于这一层:系统自带的联系人、短信等程序等。
2. Android已发布的重要版本(开发应用程序兼容到4.0即可,即可占据98%的市场份额)
Android 3.0 专为平板电脑设计
Android 4.0 不再对手机和平板进行差异化区分,既可以应用在手机上,也可以应用在平板上。
Android 5.0 用ART运行环境代替了Dalvik虚拟机提高运行速度;提出Material Design的概念优化界面设计。(同时推出了AndroidWear AndroidAuto Android TV系统应用在可穿戴设备、汽车、电视领域)
Android 6.0 加入运行时权限功能
Android 7.0 加入多窗口模式功能
3. Android应用开发特色
四大组件:
Acitivity(凡是看得见的都在activity里)
Service(低调:退出了应用,也可以在后台运行)
BroadcastReceiver(允许应用程序接收各处的广播信息,比如电话、短信等;当然也可以向外发出广播信息)
ContentProvider(为应用程序之间共享数据提供了可能,比如读取系统电话薄中的联系人等)
丰富的系统控件:
SQLite数据库(轻量级、运算速度极快,支持标准的SQL语法、还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便)
强大的多媒体(音乐、视频、录音、拍照、闹铃等)
地理位置定位(结合地图LBS这一领域潜力无限)
4. 准备所需要的工具
JDK (1.8)
AndroidSDK
AndroidStudio (2.2) 13年推出的
5. AndroidStudio 目录结构
Project下:
- gradle和idea(自动生成的文件无需关心不要去编辑)
- app(项目中的代码和资源存放目录)
- build(自动生成的文件不需要过多关心)
- gradle(包含了gradle wrapper的配置文件,默认不启动gradle wrapper的方式,如需要打开File-Settings-Build,Execution,Deployment-Gradle进行配置)
第三方的库导入的时候发现特别慢,肯定是去网上加载gradle了,此时应该配置gradle为本地路径。 - gitignore(排除版本控制的指定目录或文件)
- build.gradle(项目全局的gradle构建脚本,无需修改)
- gradle.properites(全局的gradle配置文件,配置的属性会影响到项目中所有的gradle编译脚本)
- gradlew和gradlew.bat(用来在命令行界面中执行gradle命令的,前者是mac linux,后者是windows)
- HelloWorld.iml(自动生成无需关心)
- local.properties(指定本机的SDK路径,自动生成不需修改,除非本机的sdk位置发生变化)
- settings.gradle(指定项目中所有引入的模块)
如果你发现你删除某项文件夹或者文件一直删除不了,可以来这里看看它的名字是否在,删除后即可完全删除。
app下:
- build(自动生成无需关心)
- libs(第三方jar包)
- androidTest(编写AndroidTest测试用的)
- java(存放代码的地方)
- res(存放资源的地方,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下)
- AndroidManifest.xml(配置文件:注册四大组件、添加权限声明等)
- test(编写UnitTest测试用的)
- gitgnore(排除版本控制的指定目录或文件)
- app.iml(自动生成无需关心)
- build.gradle(app模块的gradle构建脚本,根据需要更改)
- proguard-rules.pro(存放混淆规则)
6. 详解项目中的资源
res/values/strings.xml文件内容:
<resources>
<string name = "app_name">hello world</string>
</resources>
引用它有两种方式:
1. 代码中:R.string.hello_world
2. XML中:@string/helloworld
string部分是可以替换的,如果引用的是图片资源就可以替换成drawable,如果引用的应用 图标就可以替换成mipmap,如果是引用的布局文件就可以替换成layout。
7. 详解build.gradle文件
最外层的(通常不需要修改,除非想添加一些全局的项目构建配置):
buildscript{
repositories{
jcenter()----------托管仓库:声明这个配置后就可以轻松使用jcenter上的开源项目了
}
dependencies{
classpath ‘com.android.tools.build:gradle:2.2.0’-----------
Gradle插件:Java或C++很多项目都可以使用Gradle构建,想要用它来构建Android项目,
则需要声明该插件,最后的部分是插件的版本号
}
}
allprojects{
repositories{
jcenter()
}
}
最内层的:
apply plugin: 'com.android.application'-------应用了一个插件,一般两种值可选:
一个是'com.android.application'叫应用程序模块,可以直接运行.
一个是'com.android.library'是一个库模块,只能作为代码库依附于别的应用程序模块来运行.
android { ---用来配置项目构建的各种属性
compileSdkVersion 24 编译的版本
buildToolsVersion '24.0.0' 项目构建工具的版本
defaultConfig {---对项目的更多细节做配置
applicationId "com.beidou.chinapower" 包名 可以在这里进行修改
minSdkVersion 14
targetSdkVersion 24
versionCode 1 版本号
versionName "1.0" 版本名
}
buildTypes {
里面两个闭包,
一个是debug闭包(用于指定生成测试版安装文件的配置),
一个是release闭包(用于指定生成正式版安装文件的配置),前者可以忽略不写
release {
minifyEnabled false 是否进行混淆(true代表添加)
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
proguardFiles用于指定混淆时使用的规则文件,这里指定了两个文件,前者是SDK目录下,
所有项目通用的混淆规则,后者是当前项目的根目录下,可以编写当前项目特有的混淆规则
}
}
}
dependencies { 用于指定当前项目所有的依赖关系(本地依赖 库依赖 远程依赖)
compile fileTree(include: ['*.jar'], dir: 'libs')
本地依赖,表示libs下.jar结尾的都构建到项目中
testCompile 'junit:junit:4.12' 测试用例库,不关心
compile 'com.android.support:appcompat-v7:24.2.0'
远程依赖(两个部分:域名部分+组名称+版本号,域名部分作用是区分不同公司的库,组名称用于区分同一公司
不同的库,版本号部分用于区分同一个库不同的版本);先从缓存读取,没有的话去网上下载
compile project(':pulltorefresh') 库依赖(pulltorefresh是库模块名字)
}
8. 为什么不使用System.out
日志打印不可控制;打印时间无法确定;不能添加过滤器;日志没有级别