第1章:开始启程 - 你的第一行android代码

1.1 了解全貌——Android王国简介

1.1.1 Android系统架构

  • Android系统架构分为四层:

    • Linux内核层:Android系统基于Linux内核。 为Android硬件提供底层驱动,例如显示驱动,音频驱动,照相机驱动,蓝牙驱动,Wi-Fi驱动,电源管理等。

    • 系统运行库层:通过C/C++库为Android系统提供特性支持如:SQLite库提供数据库支持,Webkit库提供浏览器内核支持。
      该层还有Android运行时库,提供核心库,允许用Java语言开发Android应用。Android运行时库还包含Dalvik虚拟机(5.0后是ART运行环境),它使得每个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例,相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPI性能有限等情况做了优化处理。

    • 应用框架层:提供应用程序的各种API,Android自带的核心应用就是使用这些API完成的。

    • 应用层: 手机中所有的应用程序属于应用层,如系统自带的联系人、短信等,或者其他第三方应用程序。

1.1.2 Android已发布的版本(截止201712)

    <tr>
        <th width=10%, bgcolor=yellow>版本号</th>
        <th width=10%, bgcolor=yellow>API级别</th>
        <th width=10%, bgcolor=yellow>发布日期</th>
        <th width=10%, bgcolor=yellow>版本代号</th>
        <th width=10%, bgcolor=yellow>CodeName(系统名称)</th>
    </tr>
    <tr>
        <th>1.0</th>
        <th>1</th>
        <th>2008-09-23</th>
        <th>阿童木</th>
        <th>BASE</th>
    </tr>
     <tr>
        <th>1.5</th>
        <th>3</th>
        <th>2009-04-17</th>
        <th>纸杯蛋糕</th>
        <th>Cupcake</th>
    </tr>
     <tr>
        <th>1.6</th>
        <th>4</th>
        <th>2009-09-15</th>
        <th>甜甜圈</th>
        <th>Donut</th>
    </tr>
    <tr>
        <th>2.0</th>
        <th>5</th>
        <th>2009-10-26</th>
        <th>泡芙</th>
        <th>Eclair</th>
    </tr>
     <tr>
        <th>2.2</th>
        <th>8</th>
        <th>2010-05-20</th>
        <th>冻酸奶</th>
        <th>Froyo</th>
    </tr>
     <tr>
        <th>2.3</th>
        <th>9</th>
        <th>2010-12-06</th>
        <th>姜饼</th>
        <th>Gingerbread</th>
    </tr>
    <tr>
        <th>3.0</th>
        <th>11</th>
        <th>2011-02-24</th>
        <th>蜂巢</th>
        <th>Honeycomb</th>
    </tr>
        <th>4.0</th>
        <th>14</th>
        <th>2011-10-19</th>
        <th>冰激凌三明治</th>
        <th>Ice Cream Sandwich</th>
    </tr>
        <th>4.1</th>
        <th>16</th>
        <th>2012-06-28</th>
        <th>果冻豆</th>
        <th>Jelly Bean</th>
    </tr>
        <th>4.4</th>
        <th>19</th>
        <th>2013-09-03</th>
        <th>奇巧</th>
        <th>KitKat</th>
    </tr>
        <th>5.0</th>
        <th>21</th>
        <th>2014-10-15</th>
        <th>棒棒糖</th>
        <th>Lollipop</th>
    </tr>
        <th>6.0</th>
        <th>23</th>
        <th>2015-05-28</th>
        <th>棉花糖</th>
        <th>Marshmallow</th>
    </tr>
        <th>7.0</th>
        <th>24</th>
        <th>2016-05-18</th>
        <th>牛轧糖</th>
        <th>Nougat</th>
    </tr>
        <th>8.0</th>
        <th>26</th>
        <th>2017-8-22</th>
        <th>奥利奥</th>
        <th>Oreo</th>

</table>
  • 我擦,CSDN不支持table表格吗,上截图了…

1.1.3 Android应用开发特色

  • 四大组件

    • Activity 活动
    • Service 服务
    • BroadCast Receiver 广播接收者
    • Content Provider 内容提供者
  • 丰富的系统控件

  • SQLite数据库
  • 强大的多媒体
  • 地理位置定位

1.2 手把手带你搭建开发环境

工欲善其事,必先利其器

1.2.1 准备所需要的工具

  • JDK1.8以上:Java语言的软件开发工具包(包含Java的运行环境,工具集合,基础类库等内容)
  • Android SDK:Android开发工具包
  • Android Studio:Android编译器

1.2.2 搭建开发环境

1.3 创建你的第一个Android项目

Hello World

1.3.1 创建HelloWorld项目

1.3.2 启动模拟器

1.3.3 运行HelloWorld

当年花了大半天去搞得东西,如今几分钟,我想起那天夕阳下的奔跑…

1.3.4 分析你的第一个Android程序

Project下的目录结构

  • .gradle和.idea: Android Studio自动生成的文件
  • app: 项目中的代码,资源几乎都在放app目录下
    • build:编译时自动生成的文件
    • libs:放置第三方jar包
    • androidTest:编写Android Test测试用例,项目自动化测试
    • java:放置所有Java代码
    • res:项目资源目录
    • AndroidManifest.xml:Android项目配置文件
    • test:编写Unit Test测试用例,项目自动化测试
    • .gitignore:控制版本忽略文件
    • app.iml:IntellJ IDEA自动生成的文件
    • build.gradle:app模块的gradle构建脚本
    • proguard-rules.pro:指定项目代码的混淆规则
  • build: 项目编译时自动生成的文件
  • gradle: 包含gradle wrapper的配置文件 ,使用gradle wrapper不需要提前将gradle下好,Android Studio会自动根据缓存情况决定是否需要联网下载。默认不启用gradle wrapper,可以通过File-Setting-Build-Execution-Deployment-Gradle进行配置更改
  • .gitignore: 指定的目录或文件排除在版本之外
  • build.gradle: 项目全局的gradle构建脚本
  • gradle.properties: 全局的gradle配置文件,这里配置的属性影响项目中所有的gradle编译脚本
  • gradlew和gradlew.bat: 命令行界面执行gradle命令 ,gradlew在Linux或Mac系统中使用 ,gradlew.bat 在Windows系统中使用
  • HelloWorld.iml: 所有IntelliJ IDEA项目中都会自动生成的文件,用来标识这是一个IntelliJ.IDEA项目
  • local.properties:指定本机中SDK路径,通常自动生成
  • setting.gradle: 指定项目中所有引入的模块

1.3.5 详解项目中的资源

  • drawable 存放图片
  • mipmap 存放应用图标
  • value 存放字符串,样式,颜色等配置
  • layout 存放布局文件

1.3.6 详解build.gradle文件

AndroidStudio是采用Gradle来构建项目

1.最外层目录下:build.gradle

  • jcenter:代码托管仓库
    • classpath:Gradle插件版本
      • classpath ‘com.android.tools.build:gradle:3.0.1’
      • 因为Gradle并不是专门为构建android项目开发的,Java,C++都可以用Gradle构建

2.App目录下的:build.gradle

  • apply plugin(应用一个插件):

    • com.android.application 应用程序模块,可直接运行
    • com.android.library 库模块,只能作为代码库依附
  • android闭包(配置项目构建的各种属性):

    • compileSdkVersion: 指定项目的编译版本
    • bulidToolsVersion: 用于指定构建工具的版本
    • defaultConfig 闭包:对项目的更多细节进行配置
      • applicationId:指定项目的包名
      • minSdkVersion: 指定项目最低兼容的系统版本
      • targetSdkVersion: 在该目标版本上已经做了充分的测试,系统将为你的应用程序启用一些最新的功能和特性
      • versionCode: 指定项目的版本号
      • versionName: 指定项目的版本名
    • bulidTypes 闭包: 指定生成安装文件的相关配置,通常只有两个子闭包
      • debug:指定生成测试版安装文件的配置,可忽略不写
      • release:指定生成正式版安装文件的配置
        • minifyEnable: 指定是否对项目进行混淆
        • proguardFiles: 指定混淆时使用的规则文件,这里指定两个
          • proguard-android.txt是在AndrliodSDK目录下的,里面是所有项目通用的混淆规则
          • proguard-rules.pro 当前项目的根目录下,编写当前项目特有的混淆规则,注意:通过androidStudio直接运行项目生成的都是测试版安装文件
  • dependencies闭包:指定当前项目所有的依赖关系

    • compile fileTree 本地依赖:对本地的jar包或目录添加依赖关系
      • implementation fileTree(include: [‘*.jar’], dir: ‘libs’)
      • lib目录下所有jar后缀文件添加到项目构建路径中
    • 库依赖: 对项目中的库模块添加依赖关系
      • compile project(‘:helper’)
    • 远程依赖:对jcenter库上的开源项目添加依赖关系
      • implementation ‘com.android.support:appcompat-v7:26.1.0’
      • com.android.support 域名部分:用于和其他公司库区分 appcompat-v7 组名称,区分同一公司不同库

1.4 前行必备-掌握日志工具的使用

android.util.Log

1.4.1 使用Android的日志工具Log

  • Log.v():verbose 最小的日志
  • Log.d():debug 调试信息,比verbose高一级
  • Log.i():info 比较重要的信息,比debug高一级
  • Log.w():warm 警告信息,比info高一级
  • Log.e():error 错误信息,比warm高一级

1.4.2 为什么使用Log而不使用Systom.out

  • Log:可控制打印信息,确定打印时间,能添加过滤器,日志有级别区分
  • System.out满足不了

1.5 小结与点评

学习android的起点

本章总结

回头看看,这一章我还有很多说不出因果的点,比如android系统架构/build.gradle文件每个条目的相关情况,平时开发一般也没留意吧,知其然而不知其所以然,趁这回好好总结,在之后笔记中多写写自己的思考,触类旁通.

乱拳打死老师傅,怀着敬畏的心态去复习基础.前两天我司一个android开发跟架构争论为毛后台java接口加密用MD5不用非对称加密,架构大佬直接问:你知道MD5加密底层怎么实现的吗,它的位数长度是多少…顿时无言以对..技术的选择没有必然的好坏,但是跟别人讨论还是要提前做好准备吧,装逼有风险,就这些.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值