Android系统概览

2019-08-08  本文已影响0人  者文_

Everyone has talent. What is rare is the courage to follow the talent to the dark place where it leads.
人人都有天赋。罕见的是甘愿跟随天赋、尝尽人间甘苦的勇气。--艾瑞卡·容

1. Android系统架构

image

2 应用基础知识

Android 应用采用 Java 编程语言编写。Android SDK 工具将您的代码 — 连同任何数据和资源文件 — 编译到一个 APKAndroid 软件包,即带有 .apk 后缀的存档文件中。一个 APK 文件包含 Android 应用的所有内容,它是基于 Android 系统的设备用来安装应用的文件。

安装到设备后,每个 Android 应用都运行在自己的安全沙箱内

Android 系统可以通过这种方式实现最小权限原则。不过,应用仍可以通过一些途径来与其他应用共享数据及访问系统服务。

2.1 应用组件

应用组件是 Android 应用的基本构建基块。共有四种不同的应用组件类型。每种类型都服务于不同的目的,并且具有定义组件的创建和销毁方式的不同生命周期。

Android 系统设计的独特之处在于,任何应用都可以启动其他应用的组件。与大多数其他系统上的应用不同,Android 应用并没有单一入口点(例如,没有 main() 函数)。

2.2 启动组件

四种组件类型中的三种 — Activity、服务和广播接收器 — 通过名为 Intent 的异步消息进行启动。

每种类型的组件有不同的启动方法:

2.3 清单文件

在 Android 系统启动应用组件之前,系统必须通过读取应用的 AndroidManifest.xml 文件(“清单”文件)确认组件存在。 您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中

除了声明应用的组件外,清单文件还有许多其他作用,如:


2.4 应用资源

Android 应用并非只包含代码 — 它还需要与源代码分离的资源,如图像、音频文件以及任何与应用的视觉呈现有关的内容。提供了丰富的系统控件爱你,SQLite数据库,强大的多媒体,地理位置定位等。

3. 分析android程序

image

切换为project工程模式

image

3.1 项目结构模式

3.2 app 目录下结构模式

3.3 项目中的资源

详解res中的资源类型

注意:这么多mipmap文件夹是为了让程序更好的兼容各种设备,drawable也是,需要自己创建。

3.4 build.gradle文件内容解析

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {//这里是gradle脚本执行所需依赖,分别是对应的maven库和插件
    
    repositories {
        google()//从Android Studio3.0后新增了google()配置,可以引用google上的开源项目
        jcenter()//是一个类似于github的代码托管仓库,声明了jcenter()配置,可以轻松引用 jcenter上的开源项目
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'////此处是android的插件gradle,gradle是一个强大的项目构建工具
        

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

allprojects {//这里是项目本身需要的依赖,比如项目所需的maven库
    repositories {
        google()
        jcenter()
    }
}

// 运行gradle clean时,执行此处定义的task任务。
// 该任务继承自Delete,删除根目录中的build目录。
// 相当于执行Delete.delete(rootProject.buildDir)。
// gradle使用groovy语言,调用method时可以不用加()。
task clean(type: Delete) {
    delete rootProject.buildDir
}
apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.0"
    defaultConfig {
        applicationId "com.baiheng.helloworld"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

这里我们分块解释:

  1. apply plugin
apply plugin: 'com.android.application'

这里表示应用了一个插件,该插件有两种值可选:

'com.android.application'   //表示该模块为应用程序模块,可以直接运行,打包得到的是.apk文件
'com.android.library'   //表示该模块为库模块,只能作为代码库依附于别的应用程序模块来运行,打包得到的是.aar文件
  1. android 闭包

这个闭包主要配置项目构建的各种属性:

  1. dependencies{}闭包

    该闭包定义了项目的依赖关系,一般项目都有三种依赖方式:本地依赖、库依赖和远程依赖

    本地依赖可以对本地的jar包或目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖可以对jcener库上的开源项目添加依赖关系。从Android Studio3.0后compile引入库不在使用,而是通过api和implementation,api完全等同于以前的compile,用api引入的库整个项目都可以使用,用implementation引入的库只有对应的Module能使用,其他Module不能使用,由于之前的项目统一用compile依赖,导致的情况就是模块耦合性太高,不利于项目拆解,使用implementation之后虽然使用起来复杂了但是做到降低偶合兴提高安全性。

    dependencies {//项目的依赖关系
        implementation fileTree(include: ['*.jar'], dir: 'libs')//本地jar包依赖
        implementation 'com.android.support:appcompat-v7:27.1.1'//远程依赖
        implementation 'com.android.support.constraint:constraint-layout:1.1.2'
        testImplementation 'junit:junit:4.12'//声明测试用例库
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }
    

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

4. 日志工具的使用

日志工具中提供了5各方法来供打印日志:

5. 运行你的应用

5.1 从命令行安装运行应用程序

打开命令行并切换当前目录到Andriod项目的根目录,在debug模式下使用Gradle编译项目,使用gradle脚本执行assembleDebug编译项目,执行后会在build/目录下生成XXX-debug.apk。

Window操作系统下,执行:

gradlew.bat assembleDebug

Mac OS或Linux系统下:

$ chmod +x gradlew
$ ./gradlew assembleDebug

编译完成后在app/build/outputs/apk/目录生成apk

Note: chmod命令是给gradlew增加执行权限,只需要执行一次。

确保 Android SDK里的 platform-tools/ 路径已经添加到环境变量PATH中,执行:

adb install XXX-debug.apk
//或者
adb install -r XXX-debug.apk

则成功将apk安装到Android设备中。

上一篇 下一篇

猜你喜欢

热点阅读