android基础

Android系统架构

android-stack_2x.png

Linux 内核层

Android系统是基于Linux内核的, ART 依赖 Linux 内核层来实现线程和低内存管理等功能,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等

硬件抽象层 (HAL)

HAL 层给 Java API framework 层提供设备硬件功能的接口,HAL 由多个库模块组成,每个库模块为特定类型的硬件组件实现接口,例如相机和蓝牙模块,当 framework 层访问硬件设备时,Android 系统会为该硬件组件加载库模块

Android Runtime (ART)

从 Android 5.0 开始,每个应用程序都在自己的进程中运行,并具有自己的 ART,ART 旨在通过执行 DEX 文件在低内存设备上运行多个虚拟机

系统运行库层 Native C/C++ Libraries

许多核心 Android 系统组件和服务,例如 ART 和 HAL,他们都是从本地代码构建的,而他们的构建是需要系统运行库层所提供的的 C/C++ 本地库的,Android 平台提供 framework 层来公开这些本地库的部分功能,例如 OpenGL ES

Framework 层

提供了构建应用程序时可能用到的各种 API

应用层

安装在手机上的应用程序都是属于这一层

开发环境

下载 Google 集成好的工具:

https://developer.android.google.cn/studio

安装过程很简单,直接 “Next” 就可以了

新建项目和模拟器

新建项目

通过 File-> New -> New Project 创建项目,如下:


image-20211123123805873.png

image-20211123123937580.png

创建模拟器

点击下方的图标


image-20211123124233128.png

image-20211123124328685.png

选择自己想要的型号


image-20211123124415724.png

选择版本,如果还没下载,就点击下载
image-20211123124448231.png

更改配置,一般默认就行
image-20211123124538897.png

点击下面圈出的图标就可以启动模拟器


image-20211123124626794.png

Project 模式下的项目结构

将左侧的结构模式切换为Project 模式


image-20211123124136664.png

.gradle和.idea

这两个目录下放置的都是 Android Studio 自动生成的一些文件,无须关心,也不用去手动编辑

app

项目中的代码、资源等内容都是放置在这个目录下的,开发工作也基本是在这个目录下进行的

build

这个目录主要包含了一些在编译时自动生成的文件,也不需要过多关心

gradle

这个目录下包含了 gradle wrapper 的配置文件,使用 gradle wrapper 的方式不需要提前将 gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载 gradle。Android Studio 默认就是启用 gradle wrapper 方式的,如果需要更改成离线模式,可以点击 File -> Settings -> Build, Execution, Deployment -> Gradle,进行配置更改

.gitignore

这个文件是用来将指定的目录或文件排除在版本控制之外的

build.gradle

这是项目全局的 gradle 构建脚本,通常这个文件中的内容是不需要修改的

gradle.properties

这个文件是全局的 gradle 配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本

gradlew 和 gradlew.bat

这两个文件是用来在命令行界面中执行 gradle 命令的,其中 gradlew 是在 Linux 或 Mac 系统中使用的,gradlew.bat 是在 Windows 系统中使用的

local.properties

这个文件用于指定本机中的 Android SDK 路径,通常不需要修改。除非你本机中的 Android SDK 位置发生了变化,那么就将这个文件中的路径改成新的位置即可

settings.gradle

这个文件用于指定项目中所有引入的模块

app 目录下的结构

image-20211123123604628.png

build

这个目录和外层的build目录类似,也包含了一些在编译时自动生成的文件,不需要过多关心

libs

如果你的项目中使用到了第三方 jar 包,就需要把这些 jar 包都放在 libs 目录下,放在这个目录下的 jar 包会被自动添加到项目的构建路径里

androidTest

用来编写 Android Test 测试用例的,可以对项目进行一些自动化测试

java

放置我们所有Java代码的地方(Kotlin代码也放在这里),展开该目录,你将看到系统帮我们自动生成了一个MainActivity文件

res

在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下。当然这个目录下还有很多子目录,图片放在 drawable 目录下,布局放在 layout 目录下,字符串放在 values 目录下

AndroidManifest.xml

这是整个 Android 项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明

test

此处是用来编写 Unit Test 测试用例的,是对项目进行自动化测试的另一种方式

.gitignore

这个文件用于将 app 模块内指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似

build.gradle

这是 app 模块的 gradle 构建脚本,这个文件中会指定很多项目构建相关的配置

proguard-rules.pro

这个文件用于指定项目代码的混淆规则,当代码开发完成后打包成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读

res 目录下的结构

image-20211123125631070.png
目录 作用
以“drawable”开头的目录 放图片
以“mipmap”开头的目录 放应用图标
以“values”开头的目录 放字符串、样式、颜色等配置
以“layout”开头的目录 放布局文件

为了让程序能够更好地兼容各种设备,可以自己创建drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等目录,程序运行的时候,会根据当前运行设备分辨率的高低选择加载哪个目录下的图片,如果只有一份图片,把图片都放在drawable-xxhdpi(主流的设备分辨率)目录下

AndroidManifest.xml




    
    
        
            
                
                

                
            
        
    


build.gradle文件

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

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

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        /*分别对应了一个代码仓库
        * google仓库中包含的主要是Google自家的扩展依赖库
        * 而mavenCentral仓库中包含的大多是一些第三方的开源库*/
        google()
        mavenCentral()
    }
    /*声明了两个插件:一个Gradle插件和一个Kotlin插件*/
    dependencies {
        /*因为Gradle并不是专门为构建Android项目而开发的,
        * Java、C++等很多种项目也可以使用Gradle来构建,
        * 因此如果我们要想使用它来构建Android项目,
        * 则需要声明com.android.tools.build:gradle:7.0.1这个插件*/
        classpath "com.android.tools.build:gradle:7.0.1"
        /*Kotlin插件则表示当前项目是使用Kotlin进行开发的,
        * 如果是Java版的Android项目,则不需要声明这个插件*/
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app目录下的build.gradle文件

/*应用插件*/
plugins {
    /*com.android.application表示这是一个应用程序模块,
    * com.android.library表示这是一个库模块。
    * 应用程序模块是可以直接运行的,库模块只能作为代码库依附于别的应用程序模块来运行*/
    id 'com.android.application'
    /*应用了kotlin-android插件,想要使用Kotlin来开发Android项目,这个插件就是必须应用的
    * 还有kotlin-android-extensions插件,实现了一些非常好用的Kotlin扩展功能*/
    id 'kotlin-android'
}

/*这个闭包中我们可以配置项目构建的各种属性*/
android {
    /*指定项目的编译版本*/
    compileSdk 30

    /*对项目的更多细节进行配置*/
    defaultConfig {
        /*每一个应用的唯一标识符*/
        applicationId "com.example.androidstudy"
        /*指定项目最低兼容的Android系统版本*/
        minSdk 21
        /*在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性
        * 比如Android 6.0系统中引入了运行时权限这个功能,如果你将targetSdkVersion指定
        * 成23或者更高,那么系统就会为你的程序启用运行时权限功能,低于23就不会有该功能*/
        targetSdk 30
        /*指定项目的版本号*/
        versionCode 1
        /*指定项目的版本名*/
        versionName "1.0"

        /*在当前项目中启用JUnit测试*/
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    /*用于指定生成安装文件的相关配置
    * 通常只会有两个子闭包:一个是debug(可忽略),一个是release*/
    buildTypes {
        release {
            /*指定是否对项目的代码进行混淆*/
            minifyEnabled false
            /*用于指定混淆时使用的规则文件
            * proguard-android-optimize.txt是在/tools/proguard目录下的,里面是所有项目通用的混淆规则
            * proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则*/
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

/*指定当前项目所有的依赖关系,
* 包括本地依赖(本地的jar包或目录)、库依赖(项目中的库模块)和远程依赖(jcenter仓库上的开源项目)*/
dependencies {

    /*本地依赖声明,表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径中*/
    implementation fileTree(dir: 'libs', includes: ['*.java'])

    /*库依赖*/
    implementation project(':helper')
    
    /*远程依赖声明,Gradle在构建项目时会首先检查一下本地是否已经有这个库的缓存,
    * 如果没有的话则会自动联网下载,然后再添加到项目的构建路径中*/
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

    /*声明测试用例库,忽略*/
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

Android 的日志工具 Log

方法 对应级别 说明
Log.v() verbose 用于打印那些最为琐碎的、意义最小的日志信息
Log.d() debug 用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的
Log.i() info 用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户行为的数据
Log.w() warn 用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方
Log.e() error 用于打印程序中的错误信息,比如程序进入了catch语句中。当有错误信息打印出来的时候,一般代表你的程序出现严重问题了,必须尽快修复

Android各版本对应的SDK版本

Android 版本指的是 Platform Version,而 SDK 版本指的是 API Level,对应关系可以再以下网址查看,不过需要外网才行

https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels

平台版本 API 级别 VERSION_CODE
Android 10.0 29 Q
Android 9 28 P
Android 8.1 27 O_MR1
Android 8.0 26 O
Android 7.1、Android 7.1.1 25 N_MR1
Android 7.0 24 N
Android 6.0 23 M
Android 5.1 22 LOLLIPOP_MR1
Android 5.0 21 LOLLIPOP
Android 4.4W 20 KITKAT_WATCH
Android 4.4 19 KITKAT
Android 4.3 18 JELLY_BEAN_MR2
Android 4.2、Android 4.2.2 17 JELLY_BEAN_MR1
Android 4.1、Android 4.1.1 16 JELLY_BEAN
Android 4.0.3、Android 4.0.4 15 ICE_CREAM_SANDWICH_MR1
Android 4.0、Android 4.0.1、Android 4.0.2 14 ICE_CREAM_SANDWICH
Android 3.2 13 HONEYCOMB_MR2
Android 3.1.x 12 HONEYCOMB_MR1
Android 3.0.x 11 HONEYCOMB
Android 2.3.4、Android 2.3.3 10 GINGERBREAD_MR1
Android 2.3.2、Android 2.3.1、Android 2.3 9 GINGERBREAD
Android 2.2.x 8 FROYO
Android 2.1.x 7 ECLAIR_MR1
Android 2.0.1 6 ECLAIR_0_1
Android 2.0 5 ECLAIR
Android 1.6 4 DONUT
Android 1.5 3 CUPCAKE
Android 1.1 2 BASE_1_1
Android 1.0 1 BASE

你可能感兴趣的:(android基础)