Android基础

本文围绕Android开发展开,介绍了系统架构,包括Linux内核层、系统运行库层等;阐述了四大组件活动、服务、广播接收器和内容提供器的作用;还讲解了项目目录、app项目结构、res目录结构,详解了build.gradle文件,并介绍了日志工具Log的使用。

Android系统架构

  • 1. Linux内核层
  • 2. 系统运行库层
  • 3. 应用框架层
  • 4. 应用层

Android 四大组件

  • 活动(Activity),应用中看到的东西,都是放在活动中
  • 服务(Service),在后台默默运行
  • 广播接收器(Broadcast Recevier),接收来自各处的广播消息
  • 内容提供器(Content Provider),为应用程序之间共享数据提供了可能

项目目录

任何新建的项目目录都会默认使用 Android 模式的项目结构,但这并不是真正的项目结构,而是被 Android Studio转换过的。这种项目结构简洁明了,适合进行快速开发。

切换成 Project,这就是项目真实的目录结构:

  • .gradle 和 .idea
    • 这两个目录下放置的都是 Android Studio 自动生成的一些文件,无需关心
  • app
    • 项目中的代码、资源等内容几乎都是放置在这个目录下
  • gradle
    • 这个目录下包含了 gradle wrapper 的配置文件,使用 gradle wrapper 的方式不需要提前将 gradle 下载好,而是会自动根据本地的缓存情况决定是否需要联网下载 gradle。Android Studio 默认没有启动 gradle wrapper 的方式,如果需要打开,可以点击 File/Settings/Build,Execution, Deployment/Gradle,进行配置更改。
  • .gitnore
    • 将指定的目录或文件排除在版本控制之外
  • build.gradle
    • 项目全局的 gradle 构建脚本,通常这个文件的内容是不需要修改的。
  • gradle.properties
    • 全局的 gradle 配置文件,在这里配置的属性将会影响到项目中所有的 gradle 编译脚本。
  • gradlew 和 gradlew.bat
    • 这两个文件是用来在命令行界面中执行 gradle 命令的,其中 gradlew 是在 Linux 或 Mac 系统中使用,gradlew.bat 是在 windows 系统中使用的。
  • HelloWorld.iml
    • iml 文件是所有 IntelliJ IDEA 项目都会自动生成的一个文件(Android Studio 是基于 IntelliJ IDEA开发的),用于标识这是一个 IJ项目,不需要修改这个文件中的任何内容。
  • local.properties
    • 指定本机中的 Android SDK 路径,通常内容都是自动生成的,我们并不需要修改,除非sdk位置发生变化。
  • settings.gradle
    • 用于指定项目中所有引入的模块。由于 HelloWorld 项目中只有一个 app 模块,因此该文件也就只引入了 app 这一个模块。通常情况下模块的引入都是自动完成的。

app项目结构:

  • build
    • 包含一些在编译是自动生成的文件
  • libs
    • 如果项目使用到了第三方 jar 包,就需要把这些 jar 包放在 libs 目录下,放在这个目录下的 jar 包都会被自动添加到构建路径中去
  • androidTest
    • 用来编写 Android Test 测试用例的,可以对项目进行一些自动化测试
  • java
    • 放置所有 java 代码
  • res
    • 项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下。图片——drawable,布局——layout,字符串——values
  • AndroidManifest.xml
    • 整个 Android 项目的配置文件,在程序中定义的 四大组件 都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。
  • test
    • 用来编写 Unit Test 测试用例,是对项目进行自动化测试的另一种方式
  • .gitignore
    • 将 app 模块内的指定的目录或文件排除在版本控制之外
  • app.iml
    • IntelliJ IDEA 自动生成的文件,无需关心
  • build.gradle
    • app模块的 gradle 构建脚本,这个文件中会指定很多项目构建相关的配置
  • proguard-rules.po
    • 指定项目代码的混淆规则,当代码开发完成后打包成安装包文件

res 目录结构

  • 以 drawable 开头的文件夹都是用来放图片
  • 以 mipmap 开头的文件夹都是用来放应用图标
  • 以 values 开头的文件夹都是用来放字符串、样式、颜色等配置
  • layout 文件夹是用来放布局文件的

在 代码 中,通过 R.String.hello_world 获得字符串的引用

在 XML 中,通过 @string/hello_world 获得字符串的引用

详解 build.gradle文件

Android Studio 是采用 Gradle 来构建项目。Gradle 是一个非常先进的项目构建工具,摒弃了传统基于 XML(如 Ant 和 Maven)的各种烦琐配置。

项目中有两个 build.gradle 文件,

外层

// Top-level build file where you can add configuration options common to all sub-projects/modules.
// jcenter 是一个代码托管仓库,声明这个配置之后,就可以在项目中轻松引用任何 jcenter 上的开源项目

buildscript {
    repositories {
        google()
        jcenter()
    }
    // classpath 声明一个 Gradle 插件,因为 Gradle 并不是专门为构建 Android 项目而开发的
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()        
    }
}

内层,app 目录下的 build.gradle 文件

// 应用一个插件,application-应用程序模块,library-库模块
apply plugin: 'com.android.application' 

// 配置项目构建的各种属性
android {
    compileSdkVersion 28 // 指定项目的编译版本,28-android9.0
    // 对项目的更多细节进行配置
    defaultConfig {
        applicationId "com.example.helloworld" // 指定项目的包名
        minSdkVersion 15 // 指定项目最低兼容的 Android系统版本,15-4.0
        targetSdkVersion 28 // 28表示在该版本上已充分测试,系统会启用新功能和特性
        versionCode 1 // 项目的版本号
        versionName "1.0" // 项目的版本名
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    // 用于指定生成安装文件的相关配置,debug-测试版(可忽略不写),release-正式版
    buildTypes {
        release {
            minifyEnabled false // 是否对项目的代码进行混淆
            // 混淆时使用的规则文件,1-sdk目录下,所有项目通用;2-当前项目根目录下,当前特有
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),                             
            'proguard-rules.pro'
        }
    }
}
// 指定当前项目所有的依赖关系,本地依赖、库依赖、远程依赖
dependencies {
    // 本地依赖,将 libs 目录下所有 .jar 后缀的文件都添加到项目的构建路径中
    implementation fileTree(dir: 'libs', include: ['*.jar'])  
    // 远程依赖库,域名:组名称:版本号
    implementation 'com.android.support:appcompat-v7:28.0.0'  
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    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'
}

日志工具 Log 的使用

  • Log.v()  用于打印最为琐碎的,意义最小的日志信息,对应级别 verbose ,最低
  • Log.d()  打印一些调试信息,对调试程序和分析问题有帮助,对应级别 debug,
  • Log.i()  打印一些比较重要的数据,帮助分析用户行为数据,对应级别 info,比 debug 高一级
  • Log.w()  打印一些警告信息,提示程序在这个地方可能会潜在的风险,对应级别 warn
  • Log.e()  打印程序中的一些错误信息,代表程序出现严重问题了,对应级别 error

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值