了解Android

server/2024/10/16 2:28:21/

Android 系统架构

在这里插入图片描述
从图中可以看出,整个Android操作系统分为五层。它们分别是:

  • 内核层
    Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动。
  • 硬件抽象层
    该层为硬件厂商定义了一套标准的接口。这样可以在不影响上层的情况下,调整内部实现。
  • 系统库和运行时环境层
    这一层包括了Android Runtime(ART)和核心的Java类库。ART是一个虚拟机,用于执行应用程序的字节码。Android平台使用的是基于Java的编程语言,应用程序通常以Dalvik Executable(DEX)格式运行在ART上。
  • 应用框架层
    这一层提供了开发Android应用程序所需的各种服务和API。开发人员可以利用这些API来构建应用程序,包括用户界面(UI)组件、通知系统、数据存储、多媒体支持、位置服务等。
  • 应用层
    最顶层是应用层,包括了用户直接与之交互的应用程序,例如浏览器、短信应用、社交媒体应用等。这些应用程序是构建在Android应用框架之上的,它们通过调用框架提供的服务来实现各种功能。

Android项目结构

在这里插入图片描述

1. .gradle和.idea
这两个目录下放置的都是Android Studio 自动生成的一些文件,我们无需关心和编辑。
2.app
项目中的代码、资源等内容几乎都是放置在这个目录下的,我们后面的开发工作也都是在这个目录下进行的。
3.build
这个目录也无需关心,它主要包含了一些在编译时自动生成的文件。
4.gradle
这个目录包含了gradle wrapper的配置文件。
5. .gitignore
用来将指定的目录或文件排除在版本控制之外。
6.build.gradle
这是项目全局的gradle构建脚本。
7.gradle.properties
这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
8.gradlew和gradlew.bat
这两个文件是用来在命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。
9.local.properties
这个文件用于指定本机的Android SDK路径,通常内容是自动生成的,不需要修改。
10.settings.gradle
用于指定项目中所有引入的模块。

app目录

在这里插入图片描述

1.build
包含编译时自动生成的文件
2.libs
如果项目中使用到了第三方jar包,就需要把这些jar包都放在libs目录下,该目录下的jar包都会被自动添加到构建路径里去。
3.androidTest
这里编写Android Test测试用例的,可以对项目进行一些自动化调试
4.java
java目录是放置我们所有java代码的地方。
5.res
这个目录下内容很多,项目中使用到的所有的图片、布局、字符串等资源都要放在这个目录下。
这个目录下还有很多子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下等。
6.AndroidManifest.xml
这是整个Android项目的配置文件,在程序中定义的所有四大组件都需要在这个文件里注册,还可以在这个文件中添加权限声明。
7.test
用来编写UnitTest测试用例的,是对项目及逆行自动化测试的另一种方式。
8. .gitignore
这个文件用于将app模块内的指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。
9.build.gradle
这是app模块的gradle构建脚本,这个文件会指定很多项目构建相关的配置。
10.proguard-rules.pro
这个文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读。

项目资源res

在这里插入图片描述
所有以drawable开头的文件夹都是用来放图片的,所有以mipmap开头的文件夹都是用来放应用图标的,所有以values开头的文件夹都是用来放字符串、样式、颜色等配置的,layout文件夹时用来放布局文件的。

build.gradle文件

Android Studio是采用Gradle来构建项目的。
在项目结构中有两个build.gradle文件,一个在最外层目录下,一个在app目录下。这两个文件都有很重要的作用。

这里分析一下app目录下的build.gradle文件

里面内容很多较为复杂

plugins {id("com.android.application")
}android {namespace = "com.example.blttttt"compileSdk = 34defaultConfig {applicationId = "com.example.blttttt"minSdk = 24targetSdk = 34versionCode = 1versionName = "1.0"testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {isMinifyEnabled = falseproguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")}}compileOptions {sourceCompatibility = JavaVersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8}externalNativeBuild {cmake {path = file("src/main/cpp/CMakeLists.txt")version = "3.22.1"}}buildFeatures {viewBinding = true}
}dependencies {implementation("androidx.appcompat:appcompat:1.6.1")implementation("com.google.android.material:material:1.9.0")implementation("androidx.constraintlayout:constraintlayout:2.1.4")testImplementation("junit:junit:4.13.2")androidTestImplementation("androidx.test.ext:junit:1.1.5")androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}
  • plugins
    应用的插件,这里一般有两种值可选:com.android.application,表示这是一个应用程序模块;还有一个是com.android.library,表示这是一个库模块。
  • android闭包
    这是一个大的android闭包,在这个闭包里可以配置项目构建的各种属性。
    • compileSdk指定项目编译时使用的sdk版本
  • defaultConfig闭包
    • applicationId:项目的包名
    • minSdkVersion:项目最低兼容的版本
    • targetSdkVersion:项目的目标版本
    • versionCode:版本号
    • versionName:版本名称
  • buildTypes闭包
    • release {}闭包:指定生成正式版安装文件的配置
    • isMinifyEnabled:指定是否对项目的代码进行混淆
    • proguardFiles{}:指定混淆时使用的规则文件,里面指定了两个文件
    • proguard-android-optimize.txt:在Android SDK目录下,里面是所有项目通用的混淆规则
    • proguard-rules.pro:在当前项目的跟目录下,里面可以编写当前项目特有的混淆规则。
  • dependencies{}闭包
    指定当前项目所有的依赖关系。通常有三种依赖方式:本地依赖、库依赖和远程依赖。

从Android Studio3.0后compile引入库不在使用,而是通过api和implementation,api完全等同于以前的compile,用api引入的库整个项目都可以使用,用implementation引入的库只有对应的Module能使用,其他Module不能使用。

Android 四大组件

Android四大组件分别为:Activity、Service、Content Provider、Broadcast Receiver。

  • Activity
    一种包含用户界面的组件,主要用于和用户进行交互。
  • service
    service用于在后台完成用户指定的操作。
  • Content Provider
    负责在应用程序之间共享数据。
  • Broadcast Receiver
    允许应用接收来自各处的广播消息,也可以向外发出广播消息。

日志工具

Android日志工具Log

Android中的日志工具类是Log(android.util.Log),这个类中提供了5个方法。

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

Log.d()方法

在调试时,我们一般使用Log.d()方法,这个方法传入两个参数,第一个参数是tag,一般传入当前类名,用于对打印信息进行过滤;第二个参数是msg,就是想要打印的信息。


http://www.ppmy.cn/server/101969.html

相关文章

HarmonyOS开发:长列表界面实现详解(使用懒加载)

目录 前言长列表界面开发挑战关于懒加载HarmonyOS中的LazyForEach组件的创建关于长列表拖拽排序番外篇:NodeAdapter使用结束语前言 随着大数据的快速发展,在移动应用开发中,多数据的长列表是非常常见的情况,需要允许用户浏览大量的数据项,比如商品列表、新闻资讯等。但是长…

7.实时时钟(RTC)

理论 使用时钟晶振:32.768KHz(2{15}) 代码编写 OLED显示实时时间,串口打印 晶体、RTC配置 晶体配置 RTC配置 串口配置参考:链接 Cube IDE代码 mian.c /* USER CODE BEGIN Includes */ #include "string.h" //27行 /* USER CODE EN…

基于springboot的智能家居系统

TOC springboot198基于springboot的智能家居系统 研究背景与现状 时代的进步使人们的生活实现了部分自动化,由最初的全手动办公已转向手动自动相结合的方式。比如各种办公系统、智能电子电器的出现,都为人们生活的享受提供帮助。采用新型的自动化方式…

苹果上架没有iphone、没有ipad也可以生成截屏

使用flutter、uniapp或其他跨平台框架开发ios的APP,上架的时候都会遇到一个问题,上架的时候需要各种尺寸的设备来做ios截屏。 比如目前最新的要求是,iphone需要三种不同尺寸的设备的截屏,假如支持ipad则还需要使用ipad 2代和ipad…

斗破C++编程入门系列之四:运算符和表达式

斗破C目录: 斗破C编程入门系列之前言(斗之气三段) 斗破C编程入门系列之二:Qt的使用介绍(斗之气三段) 斗破C编程入门系列之三:数据结构(斗之气三段) 斗破C编程入门系列之…

1.Linux_常识

UNIX、Linux、GNU 1、UNIX UNIX是一个分时操作系统,特点是多用户、多任务 实时操作系统:来了请求就去解决请求 分时操作系统:来了请求先存着,通过调度轮到执行时执行 2、Linux Linux是一个操作系统内核 发行版本&#xff1…

隧道定位导航技术主要依赖于哪些原理或技术

在交通运输领域,隧道作为连接不同区域的重要通道,其内部的安全与效率问题一直备受关注。尤其是在隧道内,由于山体或建筑物的遮挡,卫星信号往往无法直接到达,传统的GPS等卫星导航定位技术在隧道内难以正常工作。因此&am…

远程消息传递的艺术:NSDistantObject在Objective-C中的妙用

标题:远程消息传递的艺术:NSDistantObject在Objective-C中的妙用 引言 在Objective-C的丰富生态中,NSDistantObject扮演着至关重要的角色,特别是在处理分布式系统中的远程消息传递。它允许对象之间跨越不同地址空间进行通信&…