android大致可分为四层架构:linux内核层,系统运行库层,应用框架层和应用层
为android设备的各种硬件提供底层驱动,如显示驱动,音频驱动,wifi驱动,电源管理等。
通过一些c/c++库为android系统提供了主要的特性支持,如SQLite库提供数据库支持,OpenGL|ES库提供3D绘图支持,Webkit提供浏览器内核的支持。
这一层还有android运行时库,他主要提供了一些核心库,允许开发者使用java语言来编写Android应用。另外还包含了Dakvik虚拟机(5.0系统后改为ART运行环境),是的每个android应用都能运行在独立的进程中。
本层主要提供各种API,开发者通过这些API来构建自己的应用程序。
所有的应用程序都属于这一层。
android系统四大组件为Activity,Service,BroadcastReceiver和ContentProvider。activity是所有android应用程序的门面,看到的东西都在activity中。service在后台默默运行,即使退出应用也可以继续运行。broadcastreceiver允许接收来自各处的广播消息。contentprovider为应用程序提供数据共享。
方便我们轻松编写漂亮的界面。
系统自带的轻量级,运算极快的嵌入式关系型数据库,支持标准的SQL语法,通过封装好的API进行操作
如音乐,拍照,视频,录音等,都可以通过程序代码控制。
gps
manifests:包含xml文件,是app运行的配置文件
java:第一个包存放当前模块的java源码,后面两个包存放测试用的java代码
res:存放当前模块的资源文件,标在mipmap目录,图片在drawable目录,布局在layout目录,字符串在values目录。
build.gradle:描述App工程的编译规则
proguard-rules.pro:用于指定项目代码的混淆规则,打包成安装包时不希望被破解
gradle.properties:用于配置编译工程的命令行参数一般不用改动
settings.gradle:配置了需要编译哪些模块,初始内容为include':app'表示只编译app模块
local.properties:项目的本地配置文件自动生成
.gradle和.idea:自动生成的文件
app:项目中所有代码资源都在里面
gradle:包含gradle wrapper的配置文件
.gitignore:将指定的文件或目录排除在版本控制之外
build.gradle:项目全局的gradle构建脚本
gradle.properties:全局的gradle配置文件
gradlew和gradlew.bat:在命令行界面执行gradle命令,gradlew.bat只用于windows
local.properties:指定本机中的android sdk路径
settings.gradle:指定项目中所有引入的模块
build:编译自动生成的文件
src中:
androidTest:用来编写测试用例
main中:
java:放置java代码
res:存放图片布局字符串等资源,图标在mipmap目录,图片在drawable目录,布局在layout目录,字符串在values目录
test:用来编写Unit Test测试用例
.gitignore:将app中指定目录或文件排除在版本控制之外,与外层类似
build.gradle:app模块的gradle构建脚本
proguard-rules.pro:用于指定项目代码的混淆规则,打包成安装包时不希望被破解
- plugins {
- alias(libs.plugins.android.application)
- }//模块
-
- android {
- namespace 'com.example.zcc'
- compileSdk 34//指定项目编译的版本
-
- defaultConfig {
- applicationId "com.example.zcc"//每个应用的唯一标识符
- minSdk 29//最低兼容的android版本
- targetSdk 34//在目标版本上已经做过测试,系统会给你的应用程序启用新的功能
- versionCode 1//指定项目的版本号
- versionName "1.0"//指定项目的版本名
-
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"//用于当前项目启动JUnit测试
- }
-
- buildTypes {
- release {
- minifyEnabled false//指定是否对项目代码进行混淆,
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'//指定混淆时使用的规则文件
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
- }
-
- dependencies {
- //指定依赖
- implementation libs.appcompat
- implementation libs.material
- implementation libs.activity
- implementation libs.constraintlayout
- testImplementation libs.junit
- androidTestImplementation libs.ext.junit
- androidTestImplementation libs.espresso.core
- }
buildTypes闭包用于生成安装文件的相关配置通常会有两个子闭包:debug、release
debug:用于指定测试版安装文件的配置,可以忽略不写
release:用于指定正式版安装文件额的配置
android:allowBackup:是否允许备份
android:icon:指定app在手机屏幕上显示的图标
android:label:指定app在手机屏幕上显示的名称
android:roundIcon:指定app的圆角图标
android:supportsRtl:是否支持阿拉伯语/波斯语这种从右往左的文字顺序 android:theme:指定app风格 android:dataExtractionRules:指定应用备份时的规则 android:fullBackupContent:定义了应用的全备份内容 tools:targetApi="31"
日志工具Log
v、d、i、w、e
Log.d("MainActivity","onCreate")第一个参数是tag一般传入当前的类名就好主要用于对打印信息的过滤;第二个参数是msg即想打印的内容
有两种方法引用res目录下的资源:
1.在代码中通过R.string.app_name可以获得该字符串的引用
2.在xml中通过@string/app_name可以获得该字符串的引用