当前位置: 首页 > news >正文

第一章 第一行Android代码

一、Android简介

1.android系统架构

linux kernel(Linux内核层):提供硬件底层驱动

libraries(系统运行库层):提供了主要的特性支持,如SQLite库、Webkit库;还包含android runtime(android运行时库)

application framework(应用框架层):提供了构建应用程序时可能用到的各种API

applications(应用层):手机上的应用程序

2.Android应用开发特色

1.四大组件

活动(Activity):看得到的

服务(Service):看不到的

广播接收器(Broadcast Receiver):接受其他应用的广播消息

内容提供器(Content Provider):应用程序间共享数据

2.丰富的系统控件

3.SQLite数据库(嵌入式关系型数据库,支持标准的SQL语法,还可以通过Android API进行操作)

4.强大的多媒体

5.地理位置定位

二、工具准备

JDK

Android SDK

Android Studio

Tips:新建项目的时候是否勾选use legacy android.support libraries
不要勾选,因为已经使用androidx类库替代了

三、分析第一个Android程序

  1. .gradle和.idea

自动生成,无需关心

2.app

放置项目的代码、资源等内容

3.build

包含编译时自动生成的文件,无需关心

4.gradle

包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle

  1. .gitignore

将指定的目录或文件排除在版本控制之外

6.build.gradle

项目全局的gradle构建脚本

7.gradle.properties

全局的gradle配置文件

8.gradlew和gradlew.bat

在命令行页面中执行gradle命令

9.HelloWorld.iml

IDEA自动生成,标识这是一个IDEA项目

10.local.properties

指定本机中Android SDK路径

11.setting.gradle

指定项目中所有引入的模块

1.app目录详解

1.build

编译时自动生成

2.libs

第三方jar包

3.androidTest

编写测试用例,自动化测试

4.java

Java代码或Kotlin代码

5.res

资源目录:图片放到drawable目录录下,布局放到layout目录下,字符串放到values目录下

6.AndroidManifest.xml

整个项目的配置文件,四大组件都需要在这个文件注册

7.test

自动化测试的另一种方式

  1. .gitignore

app模块内指定的目录和文件排除在版本控制之外

9.app.iml

IDEA项目自动生成,无需关心

10.build.gradle

app模块的gradle构建脚本

11.proguard-rules.pro

指定项目代码的混淆规则,防止打成的安装包文件被破解

2.分析HelloWorld项目

<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>

表示MainActivity是这个项目的主活动,点击应用首先出现的就是这个活动
创建的活动继承了AppCompatActivity,这是一种向下兼容的Activity(兼容到Android2.1)

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
}

为当前的活动引入activity_main这个布局

3.详解项目中的资源

drawable开头:放图片

mipmap开头:放应用图标

values开头:放字符串、样式、颜色等配置

layout:放布局文件

<resources><string name="app_name">HelloWorld</string>
</resources>

4.详解build.gradle文件

最外层目录下的build.gradle文件:

buildscript {repositories {google()jcenter()
}dependencies {classpath "com.android.tools.build:gradle:4.1.2"// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}allprojects {repositories {google()jcenter()
}
}

google()是Google自家的扩展依赖库

jcenter()是第三方代码托管库,现在已经废弃,迁移至mavenCentral()

classpath "com.android.tools.build:gradle:4.1.2" 表明Gradle构建的是Android项目

app目录下的build.gradle文件:

plugins {id 'com.android.application'
}android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {applicationId "com.jack.helloworld"minSdkVersion 21targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}dependencies {implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'com.google.android.material:material:1.1.0'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.1'androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

com.android.application表示这是一个应用程序模块, com.android.library表示这是一个库模块。二者最大的区别在于,应用程序模块是可以直 接运行的,库模块只能作为代码库依附于别的应用程序模块来运行。

applicationId "com.jack.helloworld" 是每一个应用的唯一标识符,绝对不能重复,默认会使用我们在创建项目时指定的包名

四、Android中的日志工具类Log

Log(android.util.Log)

Log.v()对应级别verbose,日志信息

Log.d()对应级别debug,调试信息

Log.i()对应级别info,数据信息

Log.w()对应级别warn,警告信息

Log.e()对应级别error,错误信息

Log.d("HelloWorldActivity","onCreate excute");

第一个参数是tag,一般传入当前类名,用于对打印信息过滤;第二个参数是msg,打印的具体内容

http://www.lryc.cn/news/214303.html

相关文章:

  • 怎样利用 AI 大模型,辅助研发管理与效能提升?
  • 聊天室的创建
  • 大数据信息抽取
  • 驱动开发11-1 编写IIC驱动-读取温湿度数据
  • 上海中优城市万豪酒店推出全新国际IP童趣主题房,独特住宿体验中国首秀
  • zsh和bash之间互相切换
  • Java - window系统快捷键大全
  • 深入理解数据结构(1)—用链表实现栈
  • Jtti:debian安装firewalld错误怎么办
  • 如何理解python中的*args和**kwargs
  • 软考之软件工程基础理论知识
  • 香港服务器不稳定的几种情况
  • 报修软件有什么用?企业如何做好设备管理与维护?
  • Go语言的键盘输入和打印输出
  • jenkins实践篇(2)—— 自动打tag的可回滚发布模式
  • golang worker channel 模式
  • 舔狗日记之好一条舔狗
  • 【地理位置识别】IP归属地应用的特点
  • 华为实验基础(2):路由器基础
  • 婚姻管理系统-使用bbst数据结构
  • 软件架构的概念
  • kubernetes存储-secrets
  • Springboot使用EasyExcel导入导出Excel文件
  • Pytorch L1,L2正则化
  • 【Elasticsearch 未授权访问漏洞复现】
  • pytorch笔记:PackedSequence对象送入RNN
  • C#WPF工具提示(ToolTip)实例
  • 智慧矿山系统中的猴车安全监测与识别
  • 网络协议--TCP连接的建立与终止
  • react条件渲染