《第一行代码》笔记——第1章 开始启程—你的第一行Android代码

第1章 开始启程——你的第一行Android代码


  《第一行代码》的第一章,讲解内容主要包括:Android简介(发展历史、系统架构)、Android Studio的简单用法、Android项目结构的分析、Log的使用等。下面仅对我个人的知识掌握情况做相关记录。


Android系统架构

Android大致分为四层架构:Linux内核层系统运行库层应用框架层应用层

  • Linux内核层:Android系统是基于Linux内核的,这一层为Android设备的各个硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。
  • 系统运行库层:这一层通过一些C/C++库来为Android系统提供了主要的特性支持。如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,WebKit库提供了浏览器内核的支持。这一层还有Android运行时库,它主要包括了一些核心库,能够允许开发者使用Java语言来编写Android应用。另外,Android运行时库中还包含了Dalvik虚拟机(5.0系统之后改为ART运行环境),它使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对于手机内存、CPU性能有限等情况做了优化处理。
  • 应用框架层:这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用这些API来构建自己的应用程序的。
  • 应用层:所有安装在手机的应用程序都是属于这一层的,比如系统自带的联系人,短信等程序,包括自己开发的程序。
    Android系统架构,图片源自维基百科

Android版本

版本号系统代号API市场占有率
2.2Froyo80.1%
2.3.3~2.3.7Gingerbread101.5%
4.0.3~4.0.4Ice Cream Sandwich151.3%
4.1.x
4.2.x
4.3

Jelly Bean
16
17
18
5.6%
7.7%
2.3%
4.4KitKat1927.7%
5.0
5.1
Lollipop21
22
13.1%
21.9%
6.0Marshmallow2318.7%
7.0Nougat240.1%

查看最新的数据可以访问http://developer.android.google.cn/about/dashboards/
从上表中可以看出,目前4.0以上的系统占据了超过98%的Android市场份额。

分析项目结构

project项目结构模式下:

外侧目录:
- app:项目中的代码、资源等内容几乎都是放在这个目录下。
- gradle: 这个目录下包含gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。
- .gitignore:这个文件是用来将指定的目录或文件排除在版本控制之外的。
- build.gradle:这是项目全局的gradle构建脚本(构建gradle用的?)。
- gradle.properties:这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
- gradlew和gradlew.bat:这两个文件是用来在命令行界面中执行gradle命令的。gradlew是在Linux和Mac系统中使用的,gradlew.bat是在Windows系统中使用的。
- local.properties:这个文件用于指定本机中的Android SDK路径。
- setting.gradle:这个文件用于指定项目中所有引入的模块。

app目录下:
- build:这个目录和外层的build目录类似,主要也是包括了一些在编译时自动生成的文件。
- libs:第三方jar包存放的目录,放在这个目录下的jar包都会被自动添加到构建路径里去。
- androidTest:此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
- java:放置所有Java代码的目录
- res:各类资源存放的目录
- AndroidManifest.xml:整个Android项目的配置文件,程序中定义的所有四大组件需要在这个文件里注册,还可以在这个文件中给应用程序添加权限声明。
- .gitignore:这个文件用于将app模块内的指定的目录和文件排除在版本控制之外。
- build.gradle:这是app模块的gradle构建脚本(构建Gradle用的?),这个文件中会指定很多项目构建相关的配置。
- proguard-rules.pro:这个文件用于指定项目代码的混淆规则。


详解build.gradle文件

Android Studio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置。

外层目录下的build.gradle文件:

buildscript{
    repositories{
        jcenter() 
    }
    dependencies{
        classpath 'com.android.tools.build:gradle:2.2.0'
    }
}
allprojects {
    repositories {
        jcenter()
}
  • jcenter是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
  • dependencies闭包中使用classpath声明了一个Gradle插件。Gradle并不是专门为构建Android项目,则需要声明com.android.tools.build:gradle:2.2.0这个插件。

app目录下的build.gradle文件:

apply plugin:'com.android.application'  
//应用了一个插件,有两种值可选:com.android.application表示这是一个应用程序模块,com.android.library表示这是一个库模块。
android{
    compileSdkVersion 24   //项目的编译版本,这里24表示使用Android 7.0系统的SDK编译
    buildToolsVersion "24.0.2" //指定项目构建工具的版本
    defaultConfig{
        applicationId "com.example.helloworld" //指定项目的包名
        minSdkVersion 15   //指定项目最低兼容的Android系统版本,这里最低兼容到Android 4.0系统
        targetSdkVersion 24   //指定的值表示你在该目标版本上已经做过充分的测试,系统将会为你的应用程序启动一些最新的功能和特性。如果23或更高,那么系统会为你的程序启动运行时权限功能。
        versionCode 1 //指定项目的版本号
        versionName "1.0" //指定项目的版本名
    }
    //buildTypes闭包中用于指定生成安装文件的相关配置,通常有两个自闭包debug/release
    buildTypes{ 
        release{ //release闭包用于指定生成正式版安装文件的配置,debug为测试版
            miniflyEnabled false //指定是否对项目的代码进行混淆
            proguardFiles getDefaultProguardFilse('proguard-android.txt'),'proguard-rules.pro'//指定混淆时使用的规则文件,第一个在Android SDK目录下,第二个是当前项目的根目录下的
            //注:Android Studio直接运行项目生成的都是测试版安装文件
        }
    }
}
//dependencies闭包指定当前项目所有的依赖关系。
//依赖方式:本地依赖、库依赖和远程依赖
//本地依赖:可以对本地的Jar包或目录添加依赖关系
//库依赖:可以对项目中的库模块添加依赖关系 基本格式:compile project(':helper')
//远程依赖:可以对jcenter库上的开源项目添加依赖关系
dependencies{
    compile fileTree(dir: 'libs',include: ['*.jar']) //本地依赖,表示将libs目录下的所有.jar后缀的文件都添加到项目的构建路径当中
    compile 'com.android.support:appcompat-v7:24.2.1'
    //远程依赖声明,其中com.android.support是域名部分,用于和其他公司的库作区分;
    //appcompat-v7是组名称,用于和同一公司中不同的库做区分;24.2.1是版本号,用于和同一个库的不同版本做区分
    testCompile 'junit:junit:4.12'  //用于声明测试用例库
}

使用日志工具Log

  • 在onCreate()方法的外面输入logt,然后按下Tab键,这是就会以当前类名作为值自动生成一个TAG常量。

碎片整理:

  • AppCompatActivity:这是一种向下兼容的Activity,可以将在各个系统版本中增加的特性和功能最低兼容到Android2.1系统

小结

  通过第一章的学习,在原有的基础上,让我对Android系统架构、项目结构(build.gradle等)和Log的使用更加深入的了解,还要继续努力,有很多细节的知识需要掌握。下面的章节会随着学习持续更新。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值