Android简介
来源:互联网 发布:vue.js nexttick用法 编辑:程序博客网 时间:2024/06/10 20:33
参考:https://zh.wikipedia.org/wiki/Android#.E5.88.86.E6.94.AF.E5.B9.B3.E5.8F.B0
《第一行代码(第二版)》
Android的前世今生
中文名一般称为安卓,由Andy Rubin领导的团队基于Linux内核所开发的操作系统,目前世界上(截止至2017年)占有率最高的操作系统。系统分支有Android Wear、Android TV、Android Auto。
系统设计
从上往下依次是:Linux内核层、系统运行库层、应用框架层、应用层
1. 应用层:Android应用的开发都在这一层,系统自带的系统级程序,如闹钟、日历也属于这一层级
2. 框架层:为上层提供构建程序时需要用的各种API接口
3. 系统运行库层:这一层主要用C/C++为Android系统提供各种特性支持。处于这一层的还有Android运行时库,提供开发者可以使用Java编写Android的支持。Android运行时库还包含了Dalvik虚拟机(Android L后改为ART),它使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例。相较于JVM,DVM是专门为移动设备定制的,对嵌入式设备的内存、CPU性能有限等情况做了优化处理。
4. Linux内核层:提供各种底层硬件的驱动,如我们常说的声卡、网卡等等。
开发环境的介绍
Android诞生之初,没有专门的IDE,所以大多数人选择了万能的“Eclipse”。后由Google亲力亲为,开发了专门用于开发Andoird程序的Android Studio,所以现在市面上,更推荐用它进行Android程序的开发工作。
注:网络上很多关于这两个IDE的安装以及使用教程,这里不多介绍
Eclipse项目目录结构介绍:
src
存放的项目的Java代码
gen
- buildConfig:应用是否可以debug
- R:保存项目中使用的资源id
Android.jar
导入这个包后,应用才可以使用Android的api
libs:
存放第三方jar包
assets
资源文件夹,存放视频或者音乐等较大的文件
bin
存放应用打包编译后的文件
res
资源文件夹,在这个文件夹中的所有资源,都会有资源id,读取时通过资源id就可以读取
layout
布局文件夹,保存布局文件,Android中所有布局文件都是xmL文件
menu
菜单配置文件夹,保存菜单的配置文件,决定菜单的样式
values
- strings:字符串资源文件,用来定义字符串资源的
- dimens:长度资源文件,用来定义长度资源
- style:样式和主题资源文件
AndroidManifest
清单文件,声明该程序所用到的所有四大组建和应用权限声明,这个文件经常用到,日后再做详细说明。
清单文件中的内容说明:
- package:应用在系统中的唯一识别,相当于身份识别ID(唯一),跟代码包中的包名虽然名字相同,但是没有任何联系,可以与包名名字不相同。
- versionCode:应用的版本号
具有以下子节点的activity就是入口的activity(所谓入口,相当于JavaSE中的main()):
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /></intent-filter>
Android Studio项目目录结构介绍
.gradle和.idea
都是Android Studio自动生成的一些文件,不要去手动编辑
app
存放Java代码、资源文件,后续的开发工作基本实在这个目录进行
build
主要包含了一些在编译时自动生成的文件
gradle
这个目录下包含了gradle wrapper的配置文件,使用gradle wrpper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。Android Studio默认没有启用gradle wrapper的方式,如果需要打开,可以点击Android Studio导航栏 → File → Settings → Build,Execution,Deployment → Gradle,进行配置更改
.gitignore
将指定的目录或文件排除在版本控制工具之外
build.gradle
项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改的。
gradle.properties
全局的gradle配置文件,在这里配置属性将会影响到项目中的所有gradle编译脚本
gradlew和gradlew.bat
这两个文件是用来在命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat则是在Windows使用
xxx.iml
自动生成的文件,主要目的是标示这是一个IntelliJ IDEA项目(Android Studio基于IntelliJ IDEA开发),不需理会
local.properties
用于指定本机中的Android SDK路径,通常是自动生成的,无需修改。除非你本机中的Android SDK位置发生了变化,那么就将这个文件中的路径修改成最新的位置即可。
settings.gradle
用于指定项目中所有引入的模块。本项目就只有一个app模块,因此该文件也就引入了app这一个模块。通常情况下模块的引入都是自动完成,需要我们手动去修改这个文件的场景比较少。
除了app目录之外,大多数的文件和目录都是自动生成的,不用太理睬,app目录才是我们的工作重点:
app目录
build
和外层的build相似,包含一些在编译时自动生成的文件,不过内容更多更复杂,无需太关心
libs
图片中没有此目录,但是如果你的项目中用到了第三方的jar包,就需要把jar包放在此目录下,再去gradle中进行构建路径
androidTest
编写AndroidTest测试用例的,可以对项目进行一些自动化测试。
java
编写代码的地方
res
资源文件夹,同eclipse中介绍的内容
AndroidManifest.xml
清单文件,同eclipse中介绍的内容
test
编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。
.gitignore
将app模块内的指定的目录或者文件排除在版本控制之外,作用和外层的.gitignore文件类似。
app.iml
IntelliJ IDEA自动生成的文件,不需太过关心。
build.gradle
app模块的gradle构建脚本,这个文件中会制定很多项目构建相关的配置,稍后会详细分析gradle构建脚本中的具体内容。
proguard-rules.pro
指定代码的混淆规则,对于什么是混淆,就是将项目打包成apk文件后,如果不希望其他别有用心的人轻松地破解你的代码,就要用到混淆。
详解资源文件夹
drawable
存放图片、animation、selector
mipmap
主要存放图片
values
存放字符串、样式、颜色等配置
layout
放置布局文件的
之所以有这么多mipmap开头的文件夹,主要是考虑Anroid的碎片化问题,适配各种屏幕的设备,drawble同理~~~当程序运行的时候,会自动去根据设备的分辨率智能地去选择加载哪个文件夹。
build.gradle文件
Android Studio采用的是Gradle构建项目的。它是一种非常先进的项目构建工具,使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML的各种繁琐配置。
通过前面的内容可知,项目中有两个build.gradle文件,一个是在最外层的目录下,另一个实在app目录下。这两个文件对构建Android Studio项目都起到了至关重要的作用,下面我们就来对这两个文件中内容进行详细的分析。
最外层的build.gradle文件:
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}allprojects { repositories { jcenter() }}task clean(type: Delete) { delete rootProject.buildDir}
以上的代码是自动生成:
以上有两处repositories的闭包中都声明了jcenter()这行配置,那么这个jcenter是什么意思呢?其实它是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
dependencies闭包中使用classpath声明了一个Gradle插件。因为Gradle并不是专门为构建Android项目而开发的,Java、C++等很多种项目都可以使用Gradle来构建。因此如果我们要想使用它来构建Android项目,则需要声明
com.android.tools.build:gradle:2.3.1
这个插件,后面的数字指的是版本号。
通常情况下,并不需要修改上面这个文件,除非你想添加一些全局的项目构建配置。
app目录下的bulid.gradle文件:
apply plugin: 'com.android.application'android { compileSdkVersion 25 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.example.treestructuredemo" minSdkVersion 17 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12'}
第一行应用了一个插件,一般有两种值可选:
com.android.application
表示这是一个应用程序模块,com.android.library
表示这是一个库模块。应用程序模块和库模块的最大区别在于,一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。接下来是一个大的android闭包,这里我们可以配置项目构建的各种属性。其中,
compileSdkVersion
用于指定项目的编译版本,这里指定成25表示使用Android7.1.1系统的SDK编译。buildToolsVersion
用于指定项目构建工具的版本,如果有要更新的版本时,Android Studio会进行提示。android闭包中又嵌套了一个defaultConfig闭包,defaultConfig闭包中可以对项目的更多细节进行配置。其中
applicationId
用于指定项目的报名,前面我们在创建项目的时候其实已经指定过包名了,若你想在后面对其进行修改,那么就是在这里修改的。minSdkVersion
用于指定项目最低兼容的Android系统版本,这里指定为17表示最低兼容到Android 4.2系统。targetSdkVersion
指定的值表示你在该目标版本上已经做了充分的测试,系统将会为你的应用程序启动一些最新的功能和特性。比如说Android 6.0系统中引入了运行时权限这个功能,如果你将targetSdkVersion
指定成23或者更高,那么系统就会为你的程序启用运行时权限功能,而如果你将targetSdkVersion
指定成22,那么就说明你的程序最高只在Android 5.1系统上做过充分的测试,Android 6.0系统中引入的新功能自然就不会启动了。versionCode
用于指定项目的版本号,versionName
用于指定项目的版本名,这两个属性在生成安装文件的时候非常重要。接下来看看那buildTypes闭包。buildTypes闭包中用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug,一个是release。debug闭包用于指定生成测试版安装文件的配置,release闭包拥有普指定生成正式版安装文件的配置。另外debug闭包是可以忽略不写的,因此我们看到上面的代码中就只有一个release闭包。release闭包中,
minifyEnabled
用于指定是否对项目的代码进行混淆,true表示混淆,false表示不混淆。proguardFiles
用于指定混淆时使用的规则文件,这里指定了两个文件,第一个proguard-android.txt是在Android SDK目录下的,里面是所有项目通用的混淆规则,第二个proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。需要注意的是,通过Android Studio直接运行项目生成的都是测试版安装文件。dependencies闭包,它可以指定当前项目所有的依赖关系。通常Android Studio项目一共有三种依赖方式:本地依赖、库依赖和远程依赖。本地依赖可以针对本地的jar包或者目录添加依赖关系,库依赖可以针对项目中的库模块添加依赖关系,远程依赖则可以对jcenter库上的开源项目添加依赖关系。观察一下dependencies闭包中的配置,第一行的compile fileTree就是一个本地依赖声明,它表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径当中。而第三行的compile则是远程依赖声明,
com.android.support:appcompat-v7:25.3.1
就是一个标准的远程依赖库格式,其中com.android.support
是域名部分,用于和其他公司的库做区分;appcompat-v7
是组名称,用于和同一个公司中不同的库做区分;25.3.1
是版本号,用于和同一个库不同的版本做区分。加上这句声明后,Gradle在构建项目时会首先检查一下本地是否已经有这个库的缓存,如果没有的话则会去自动联网下载,然后再添加到项目的构建路径当中。至于库依赖声明这里没有用到,它的基本格式是compile project
后面加上要依赖的库名称,比如说有一个库模块的名字叫helper,那么添加这个库的依赖关系只需要加入compile project(':helper')
这句声明即可。另外剩下的一句testCompile
是用于声明测试用例库的,这个暂时用不到,忽略
Android日志工具Logcat的使用
Android中的日志工具类Logcat,作用类似于JavaSE中的System.out.println(),有以下方法:
- 日志信息总共分为5个等级
- verbose:打印最为烦琐的,意义最小的日志信息。级别最低
- debug:打印调试阶段的信息,比verbose高一级别
- info:打印比较重要的数据,可以帮你分析用户行为。比debug高一级
- warn:打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。比info高一级
- error:打印程序中的错误信息,出现后,应尽快去修复。级别比warn高
- 定义过滤器方便查看
- 不用System.out.println()是因为,日志打印不可控制、打印时间无法确定、不能添加过滤器、日志没有级别区分……
- System.out.print输出的日志级别是info,tag是System.out
Android提供的日志输出api
Log.v(TAG, "加油吧,童鞋们");Log.d(TAG, "加油吧,童鞋们");Log.i(TAG, "加油吧,童鞋们");Log.w(TAG, "加油吧,童鞋们");Log.e(TAG, "加油吧,童鞋们");
如果使用过滤器加日志级别控制还不能满足需求,可以进一步使用关键字过滤:
- Android简介
- Android简介
- Android简介
- Android简介
- android 简介
- Android简介
- Android简介
- Android简介
- android简介
- Android简介
- Android简介
- android简介
- Android简介
- Android简介
- android简介
- Android 简介
- Android--简介
- android简介
- Cmake 自学笔记(linux)(四)
- 数组的定义及初始化
- tomcat学习之四:tomcat的类加载机制
- ST17H26对接RC522读IC卡
- Equinix成为“康普新托管数据中心联盟”的首个成员
- Android简介
- MAC下通过XAMPP和PHPStorm配置PHP开发环境
- bzoj 3384(dp)
- 从事大数据工作的朋友 你拥有几个大数据证书?
- Shell 脚本 遍历文件 找出包含特定字符串的行数
- 如何删除CSDN上自己上传的资源方法汇总(第一种方法神操作,亲测有效)
- jquery post时content-type的几种取值
- POJ 1459.Power Network
- 将printf函数格式化输出的内容存储到字符串数组里