《第一行代码》笔记1

简介

Android系统架构

  • Linux内核层
    • 提供了硬件的底层驱动
      • 显示驱动、音频驱动、照相机驱动、蓝牙驱动、WiFi驱动、电源管理
  • 系统运行库层
    • C/C++库(主要的特性支持)
      • SQLite库——数据库支持
      • OpenGL|ES库——3D绘图
      • Webkit库——浏览器内核
    • Android运行时库
      • 允许开发者使用Java编写Android应用
      • Dalvik虚拟机(5.0系统后改为ART运行环境)
        • 使得每个Android应用运行在独立的进程中,拥有自己的Dalvik虚拟机实例
        • 专门为移动设备定制(针对内存、CPU性能做了优化)
  • 应用框架层
    • 构建应用程序时可能用到的API
  • 应用层
    • 应用程序

Android应用开发特色

  • 四大组件
    • 活动(Activity)
      • 所有Android应用程序的门面
    • 服务(Service)
      • 后台运行(即使退出应用仍可以继续运行)
    • 广播接收器(Broadcast Receiver)
      • 允许应用接收广播消息(电话、短信 etc.)
      • 可以向外发出
    • 内容提供器(Content Provider)
      • 应用程序之间共享数据
  • 丰富的系统空间
  • SQLite数据库
    • 轻量级、运算速度快
    • 嵌入式关系型数据库
    • 支持SQL语法、Android封装好的API
  • 强大的多媒体
  • 地理位置定位

搭建开发环境

工具:JDK、Android SDK、Android Studio

过程:https://developer.android.google.cn/studio/install?hl=zh-cn

项目结构

  • .gradle和.idea
    • Android Studio自动生成
  • app
    • 项目代码、资源
  • build
    • 编译时自动生成的文件
  • gradle
    • gradle wrapper的配置文件
  • .gitignore
    • 版本控制
  • build.gradle
    • 项目全局的gradle构建脚本
  • gradle.properties
    • 全局的gradle配置脚本
    • 配置的属性会影响到项目中所有的gradle编译脚本
  • gradlew(Linux、Mac)和gradlew.bat(Windows)
    • 用来在命令行界面中执行gradle命令
  • .iml
    • 标识IntelliJ IDEA项目
  • local.properties
    • 指定Android SDK路径
  • settings.gradle
    • 指定项目中所有引入模块

app目录

  • build
    • 在编译时自动生成的文件
  • libs
    • 第三方jar包
  • androidTest
    • 测试用例
  • java
    • Java代码
  • res
    • 图片(drawable)、布局(layout)、字符串(values)等资源
  • AndroidManifest.xml
    • 项目的配置文件
    • 注册四大组件
    • 给应用程序添加权限声明
  • test
    • 单元测试用例
  • .gitignore
    • app模块内的版本控制(和外层的作用一样)
  • app.iml
    • 自动生成
  • build.gradle
    • app模块的gradle构建脚本
  • proguard-rules.pro
    • 指定项目代码的混淆规则

HelloWorld运行

  • AndroidManifest.xml注册活动

    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    

    表示该活动时这个项目的主活动,首先启动该活动

  • Java活动代码

    • 继承自AppCompatActivity

      • 一种向下兼容的Activity(至Android 2.1)

      • Activity是活动基类

      • onCreate():一个活动被创建时必定要执行的方法

        // 逻辑和视图分离
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);// 引入布局
        
  • res/layout定义布局

项目资源(res目录)

  • drawable:图片
  • mipmap:应用图标
    • 兼容各种设备:为一张图片提供不同分辨率的版本,分别放在文件夹下
    • 程序运行时,自动根据设备分辨率选择加载哪个文件夹下的图片
    • 默认:drawable-xxhdpi
  • values:字符串、样式、颜色等
  • layout:不具备文件

使用资源

<resources>
    <string name="app_name">HelloWorldstring>
resources>

引用:

  • 代码:R.string.app_name
  • xml:@string/app_name

build.gradle文件

Android Studio采用Gradle构建项目

Gradle使用了一种基于Groovy的领域特点语言(DSL)来声明项目设置

  • 外层build.gradle

    buildscript {
        repositories {
            google()
            // jcenter是一个代码托管仓库,声明后可以引用jcenter上的开源项目
            jcenter()
        }
        dependencies {
        	// 声明了一个Gradle插件,用于构建Android项目,版本为4.0.0
            classpath "com.android.tools.build:gradle:4.0.0"
        }
    }
    allprojects {
        repositories {
            google()
            jcenter()
        }
    }
    
  • 内层

    // 应用了一个插件
    // com.android.application:应用程序模块(可以直接运行)
    // com.android.library:库模块(作为代码库依附于应用程序模块来运行)
    apply plugin: 'com.android.application'
    
    // 配置项目构建的各种属性
    android {
    	// 项目的编译版本
        compileSdkVersion 30
        // 构建工具的版本
        buildToolsVersion "30.0.0"
        defaultConfig {
        	// 项目的包名
            applicationId "com.example.helloworld"
            // 最低兼容的Android系统版本
            minSdkVersion 16
            targetSdkVersion 30
            // 项目的版本号
            versionCode 1
            // 指定项目的版本名
            versionName "1.0"
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
        // 指定生成安装文件的相关配置
        buildTypes {
        	// debug闭包:指定生成测试版安装文件的配置(可以忽略不写)
        	// 指定生成正式版安装文件的配置
            release {
            	// 是否对项目代码进行混淆
                minifyEnabled false
                // 指定混淆时使用的规则文件
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    // 指定项目的依赖关系(本地依赖/库依赖/远程依赖)
    dependencies {
    	// 本地依赖:本地的Jar包或者目录
        implementation fileTree(dir: "libs", include: ["*.jar"])
        // 远程依赖(域名:组名:版本号)
        // 先检查本地是否已经有这个库的缓存,如果没有自动联网下载,然后添加到项目的构建路径中
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        // 声明测试用例库
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'androidx.test.ext:junit:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    }
    

日志工具

Log(android.util.Log)

信息 对应级别
Log.v() 日志信息 verbose(最低)
Log.d() 调试信息 debug
Log.i() 比较重要的数据,可以帮助分析用户行为数据 info
Log.w() 警告信息,提示可能会有潜在风险,最好修复 warn
Log.e() 错误信息,表示出现严重问题,必须尽快修复 error

参数:

  • tag:一般传入当前类名,用于对打印信息进行过滤
  • msg:具体内容

System.out()弊端:日志打印不可控、打印时间无法确定、不能添加过滤器/日志没有级别区分……

过滤器

你可能感兴趣的:(Android)