第一行代码-第二版(郭霖著)笔记(初识Android)

article/2025/9/17 9:07:02

系列文章目录

第一章 第一行代码-第二版(郭霖著)笔记(初识Android)


目录

一、Android简介

1.android系统架构

2.Android应用开发特色

二、工具准备

Tips:新建项目的时候是否勾选use legacy android.support libraries

三、分析第一个Android程序

1.app目录详解

2.分析HelloWorld项目

3.详解项目中的资源

4.详解build.gradle文件

四、Android中的日志工具类Log

1.Logcat中的过滤器


一、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

5. .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

自动化测试的另一种方式

8. .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>

在代码中通过R.string.app_name可以获得该字符串的引用;在XML中通过@string/app_name可以获得该字符串的引用。


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,打印的具体内容 


1.Logcat中的过滤器

Firebase是Google提供的一个开发者工具和基础架构平台,我们可以不用管它

11c35b7069262f2563034786e874b4df.png 

data这个过滤器只会显示tag名称为data的日志


http://chatgpt.dhexx.cn/article/dGF67P5F.shtml

相关文章

专访郭霖:成长无止境

留意文末赠书活动 嘉宾 | 郭霖 文 | 张霞 郭霖&#xff0c;Android开发工程师&#xff0c;Android GDE&#xff08;Google认证开发者专家&#xff09;。从事Android开发工作9年&#xff0c;有着丰富的项目实战经验&#xff0c;负责及参与开发过多款移动应用与游戏&#xff0c;开…

解决http响应状态为canceled

最近写登录的页面&#xff0c;发现通过ajax请求后台的时候&#xff0c;监控台返回该请求的状态是canceled。 原因 仅仅是由于之前为了在输入账号时让浏览器进行自动补全&#xff0c;而将原先的div更换为了form,而不巧的是之前的登录事件源使用的是button。 而至于为什么stat…

ajax请求导致status为canceled的原因

在使用layui的form表单提交以后&#xff0c;请求状态总是canceled。后来在form表单的后面添加了一行代码&#xff1a; return false; 就可以了。 文档&#xff1a;https://www.layui.com/doc/modules/form.html#onsubmit 错误&#xff1a; 解决方法&#xff1a; 总结一下&…

ajax请求文件状态为 canceled 的解决办法

ajax请求文件状态为 canceled 的解决办法 场景还原原因分析解决 场景还原 最近做一个表单提交的需求时&#xff0c;遇到了这种情况&#xff0c;输完账号密码后回车提交&#xff0c;报错&#xff0c;f12打开看到是请求的status为canceled了&#xff0c;震惊一秒钟。。。如下图&…

chrome同步或登录报错:Request Canceled

原因 因为某个接口连接失败造成&#xff0c;可以摁快捷键F12或者点击开发者工具。 然后选择network&#xff0c;这里面是该页面所有的收发请求 开始登录&#xff0c;登录的时候要注意network中pending或者报错的接口&#xff0c;然后把域名记录下来 解决方式 安装chrome插…

http发送请求,status显示canceled的原因

原因&#xff1a;onSubmit和submit属性比较陈旧&#xff0c;在提交了数据以后会自动刷新页面&#xff0c;导致信息丢失以及请求中止 解决&#xff1a;在 handler里面写入e.preventDefault();阻止onsubmit执行默认的刷新页面行为。

使用 npm create vue@3 报错 npm ERR! canceled

问题 之前运行都可以成功创建&#xff0c;但今天运行 npm create vue3 的时候报错了&#xff0c;错误信息如下&#xff1a; 解决方法 在网上找了一堆方法都无效。 npm 版本问题&#xff0c;升级到最新版本 npm i -g npm&#xff0c;然后重试 npm create vue3 【x】npm cac…

Go:read一个已经被canceled的http.Request的应答

Go&#xff1a;read一个已经被canceled的http.Request的应答 1.复现 最近发现项目在处理chunk类型的http应答时&#xff0c;出现读数据异常报错&#xff0c;代码示例如下&#xff1a; server package mainimport ("bytes""net/http" )func main() {http…

Idea通过git拉取代码的时候出现Update canceled问题

当在IDEA中通过Git更新代码时&#xff0c;拉取失败&#xff0c;报如下错误 12:31 Update failedInvocation failed Server returned invalid Response.java.lang.RuntimeException: Invocation failed Server returned invalid Response.at git4idea.GitAppUtil.sendXmlRequest…

Xmodem operation was canceled by remote peer问题已解决

1.Xmodem operation was canceled by remote peer. 传输的时候就会出现注意的问题 2.使用df -h命令查看内存状况&#xff0c;可以发现root已经满了。 3.进入根目录&#xff0c;ls显示&#xff0c;使用rm命名将其中的文件删除 4.显示&#xff0c;可以看见内存占用变少。 5.…

vue proxy发出的post请求出现超时导致的canceled

0 问题 vue的proxy代理好了之后&#xff0c;get请求没问题&#xff0c;post请求出现canceled&#xff0c;如下图所示&#xff1a; 解决方案 参考 https://github.com/chimurai/http-proxy-middleware/issues/40 devServer: {host: 0.0.0.0,port: 8085,proxy: {/api: {targ…

IDEA中git拉取代码的时出现Update canceled问题

IDEA中git拉取代码的时出现Update canceled问题 当在IDEA中通过Git更新代码时&#xff0c;拉取失败&#xff0c;报如下错误 解决办法&#xff1a; 勾选上以后&#xff0c;点击 OK 后拉取代码&#xff1b; 然后就成功了

解决Canceled future for execute_request message before replies were done

报错&#xff1a;Canceled future for execute_request message before replies were done The Kernel crashed while execut 解决办法&#xff0c;在代码中添加 import os os.environ["KMP_DUPLICATE_LIB_OK"]"TRUE"就完美解决了

ajax请求取消状态,Ajax请求响应状态status为canceled

需求:业务数据提交成功之后,根据表单 ‘项目阶段’ 字段的值发送邮件; 我的实现逻辑是这样的:在业务数据提交成功后的回掉函数中发起发送邮件的请求,然后关闭表单页面。 $.ajax({url: url, type: post, data: {...}, dataType: json, success: function (result) {$.ajax(…

前端axios请求form-data,status显示canceled

前端axios请求form-data,status显示canceled 起因改进&报错发现&解决问题 PS&#xff1a;前排提示本文略微啰嗦&#xff0c;解决办法在 “发现&解决问题” 部分。 起因 最近在网上跟着学习axios在vue中的使用&#xff0c;包含axios的基本数据请求&#xff0c;实例…

Http响应状态Status为canceled

现象 Ajax发送请求 在浏览器的Network发现 响应状态 变为 cnaceled 解决方案 1.表单提交时用的是自定义的button 调用ajax 和form表单中的属性action冲突&#xff0c; form action与绑定于button上的click事件会同时触发。form action将表单内容以get请求追加至当前url上&…

iOS xcode无故build canceled解决办法

iOS xcode无故build canceled解决办法 简单说下原因和处理方法&#xff0c;后面有发现具体原因再补充 原因: 代码更改确定没有影响到xcodeproj&#xff0c;但查看确发现project.pbxproj文件有变化&#xff0c;导致LaunchImage设定有变化 Bulid Setting 中查看影响到的是Launc…

跨域上传,请求状态canceled

上图展示&#xff1a; 解决方法&#xff1a; 仔细看看前端代码&#xff0c;哪个地方设置了timeout

关于浏览器请求队列和超时表现(canceled)

前端在向服务器 API 发送请求时一般会设置一个超时时间&#xff0c;避免超过期望时间的持续等待。 以 Axios 为例&#xff0c;一般会设置 timeout 请求超时选项。 但是浏览器判断超时并不是这么简单。 搭建环境 express axios 搭建 web 服务。 在项目目录下安装依赖&…

http请求响应状态为canceled

http请求响应状态为canceled问题 背景&#xff1a;vue3结合axios , 某个接口请求总是会出现canceled状态&#xff0c;如下图&#xff1a; 分析一下&#xff0c;可能是超时时间设置的问题&#xff0c;原始超时时间显示设置的是3s, 而这个接口响应时间大概有5&#xff5e;10s&a…