前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《第一行代码》读书笔记1

《第一行代码》读书笔记1

原创
作者头像
bug开发工程师007
发布2023-10-27 14:33:05
3171
发布2023-10-27 14:33:05
举报
文章被收录于专栏:objectobject

Android系统架构

Android大致可以分为四层架构:Linux内核层、系统运行库层、应用框架层、应用层。

1. Linux内核层

Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理。

2. 系统运行库层

这一层通过一些c/c++库来为Android系统提供了主要的特性支持。如SQLite库提供了数据库的支持,OpenGL|ES提供了3D绘图的支持,Webkit提供了浏览器内核的支持。

在这一层还有Android运行时库,他主要提供了一些核心库,能够允许开发这使用Java语言来编写Android应用。另外,Android运行时库中还包含了Dalvik虚拟机(5.0系统之后改为ART运行环境),它使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的。它针对手机内存、CPU性能有限等情况做了优化处理。

3. 应用框架层

这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成,开发者也可以通过这些API来构建自己的应用程序

4. 应用层

所有安装在手机上的应用程序都是属于这一层的。

Android应用开发特色

1. 四大组件

Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。其中活动是所有Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。而服务就比较低调了,你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。广播接收器允许你的应用接收来自各处的广播消息,比如电话,短信等。当然你的应用也可以向外发出广播消息。内容提供器则为应用程序之间共享数据了可能,比如你想要读取系统电话本中的联系人,就需要通过内容提供器来实现。

2. 丰富的系统控件

Android系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。也可以自己定制自己的控件。

3.SQLite数据库

Android系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库,不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作、让存储和读取数据变得非常方便。

4. 强大的多媒体

Android系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照等等。这些都可以在程序中通过代码进行控制。

5. 地理位置定位

Android手机都内置GPS。

搭建开发环境

下载JDK

下载IDEA

下载Android SDK,通过idea下载

打开idea,新建一个项目,选择android,点击install SDK进行下载。

创建第一个Android项目

* name为软件名称,package name是项目的包名,Andriod系统是通过包名来区分不同的应用程序,所以要保证包名的唯一性。Minimum API Level为项目的最低兼容版本*

运行第一个Android项目

1.点击菜单栏File下的project structure。配置Artifacts。artifact是一种用于装载项目资产以便于测试,部署,或者分布式软件的解决方案。

2. 选择运行设备

分析第一个Android项目

1. 项目结构的分析

4. .gradle和.idea都是自动生成的一些文件,无需关心,也不需要编辑。

5. app :项目中的代码、资源等内容几乎都是放置在这个目录下的。

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

7. .gitgnore:这个文件是用来将指定的目录或文件排除在版本控制之外的。

8. build.gradle:项目全局的gradle构建脚本,通常这个文件的内容是不需要修改的。

9. gradle.properties:全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。

10. gradlew和gradlew.bat:用来是命令行界面执行gradle命令,其中gradlew是在linux或mac系统中使用的,gradlew.bat是在windows系统中使用的。

11. 项目名.iml:自动生成的文件,用于标识这是一个IntelliJ IDEA项目,不需要修改这个文件中的任何内容。

12. local.properties:用于指定本机中的Android SDK路径,通常内容都是自动生成的,不需要修改。

10.settings.gradle:这个文件用于指定项目中所有引入的模块。

2. app目录的分析

1 build:主要包含了一些在编译时自动生成的文件,不需要过多关心。

2 libs:在项目中使用的第三方jar包,放在这个目录下的jar包会自动添加到构建路径里去。

3 androidTest:用来编写Android Test测试用例,可以对项目进行一些自动化测试。

4 main下面的java:放置所有Java代码的地方。

5 res:项目中使用到的所有图片、布局、字符串等资源需要存放在这个目录下。图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下。应用图标放在mipmap目录下。

6 AndroidMainifest.xml:整个Android项目的配置文件,在程序中定义的所有四大组件都需要在这个文件里注册,还可以在这个文件中给应用程序添加权限声明。

7 test:用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。

8 gitinore:这个文件用于将app模块内的指定的目录或文件排除在版本控制之外。

9 app.iml:自动生成的文件,不需要关心。

10 build.gradle:这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。

11 proguard-rules.pro:这个文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望被别人破解,通常会将代码进行混淆,从而让破解者难以阅读。

3. 分析项目如何运行

1 打开AndroidMainifest.xml

2 分析活动代码

继承AppCompatActivity,这是一种向下兼容的Activity,可以将Activity在各个系统版本中增加的特性和功能最低兼容到Andriod2.1系统。Activity是Andriod系统的一个活动基类,项目中所有活动都必须继承它或者它的子类才能拥有活动的特性。onCreate这个方法是一个活动被创建时必定要执行的方法。

Android程序的设计讲究逻辑和视图分离,因此不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。

3 如何引用res目录下的内容

例如res/values/strings.xml。可以有两种方式进行引用。

在代码中通过R.string.name获得该字符串的引用

在xml中通过@string/name获得该字符串的引用。

其中string部分是可以替换的,如果是引用的图片资源就可以换成drawable,如果引用的是应用图标就可以替换成mipmap,如果是引用的布局文件可以替换成layout

4 详解build.gradle文件

Gradle是一个非常先进的项目构建文件,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(如Ant和Maven)的各种繁琐配置。

最外层的build.gradle

dependencies闭包中使用了classpath声明了一个Gradle插件。

app目录下的build.gradle

apply plugin应用了一个插件,一般有两种值可选:com.android.application,表示这是一个应用程序模块,com.android.library表示这是一个库文件。应用程序模块和库模块的最大区别在于,一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。

compileSdkVersion用于指定项目的编译版本。buildToolsVersion用于指定项目构建工具的版本。

在defaultConfig闭包中可以对项目的更多细节进行配置。applicationId用于指定项目的包名。minSdkVersion用于指定项目最低兼容的Android系统版本。targetSdkVersion指定的值表示你在该目标版本上已经做过充分的测试。

在buildTypes闭包中用于指定生成完整文件的相关配置,通常会有两个子闭包,一个是debug,一个是release。debug闭包用于指定生成测试版安装文件的配置,release闭包用于指定生成正式版安装文件的配置。debug闭包是可以忽略不写的release闭包中minifyEnabled用于指定是否对项目的代码进行混淆,true代表混淆,false代表不混淆。proguardFiles用于指定混淆时使用的规则文件,这里指定了两个文件,第一个是proguard-android.txt是在Android SDK目录下的,里面是所有项目通用的混淆规则。第二个是proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。

掌握日志工具的使用

Android中的日志工具是Log(android.util.Log),这个类提供了如下5个方法来供我们打印日志。

Log.v()。用于打印那些最为繁琐的、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种。

Log.d()。用于打印一些调试信息,对应级别debug,比verbose高一级。

Log.i()。用于打印一些比较重要的数据,可以分析用户行为数据,对应级别info,比debug高一级。

Log.w()。用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。

Log.e()。用于打印程序中的错误信息,当有错误信息打印出来,代表程序出现了严重问题,必须尽快修复。对应级别error,比warn高一级。

活动是什么

活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用程序中可以包含零个或多个活动。

手动创建活动

右键new -activity- empty activity。

勾选Generate Layout File表示会自动创建一个对应的布局文件。

勾选LauncherActivity表示会自动将新创建的活动设置为当前项目的主活动。

创建和加载布局

Android程序的设计讲究逻辑和视图分离,最好每一个活动都能对应一个布局,布局就是用来显示界面内容的。

右击app/src/main/res目录->New->Directory,会弹出一个新建目录的窗口,起名为layout。右键->new ->Layout resources file,新建布局资源文件。

Design是当前的可视化布局编辑器 ,在这里不仅可以预览当前的布局,还可以通过托放的方式编辑布局。而Text则是通过XML文件的方式来编辑布局。

代码语言:javascript
复制
 <Button
            android:text=" Button 1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:id="@+id/button_1"/>

match_parent表示让当前元素和父元素一样宽,wrap_content表示当前元素的高度只要能刚好包含里面的内容就行。

在活动里新增代码setContentView(R.layout.first_layout);setContentView()方法来给当前的活动加载一个布局。项目中添加的任何资源都会在R文件中生成一个相应的资源id。

注册活动以及配置主活动

所有的活动都要在AndroidManifest.xml中进行注册才能生效。Idea会自动帮忙注册。但是现在仍然不能运行程序,程序当前仍然没有配置主活动。

配置主活动的方法

在标签的内部加入

代码语言:javascript
复制
 <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

在活动中使用Toast

Toast是Android系统提供的一种提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间内后自动消失,并且不会占用任何屏幕空间。

代码语言:javascript
复制
 Button button1=(Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Toast.makeText(FirstActivity.this,"you clicked",
                        Toast.LENGTH_SHORT).show();
            }
        });

findViewById()可以获取到在布局文件中定义的元素,返回的是一个View对象,需要向下转型成Button对象。setOnClickListener()为按钮注册一个监听器,点击按钮时就会执行监听器的onClick()方法。

Toast的用法非常简单,通过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来就可以。makeText()需要传入3个参数,第一个参数时Context,也就是Toast要求的上下文。第二个参数时Toast显示的文本内容,第三个参数时Toast显示的时长。

在活动中使用Menu

在res目录下新建一个menu文件夹,右键文件夹->new ->Menu resource file。

在新创建好的文件添加代码。

代码语言:javascript
复制
<item android:id="@+id/add_item" android:title="Add"/>
<item android:id="@+id/remove_item" android:title="Remove"/>

标签用来创建具体的某一个菜单项。

回到活动重写onCreateOptionsMenu()方法

代码语言:javascript
复制
  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

getMenuInflater()方法可以获得MenuInflater对象,再调用它的inflate()方法就可以给当前活动创建菜单。inflate()方法接收两个参数,第一个参数用于指定我们通过哪一个资源文件来创建菜单。第二个参数用于指定菜单项将添加到哪一个Menu对象当中。返回值true,表示允许创建的菜单显示出来,如果返回false,创建的菜单将无法显示。

销毁活动

使用代码的方式:finish(),在活动中调用一下这个方法就可以销毁当前活动了。

暂时先写这么多把,后续有空将会更新这个系列!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Android系统架构
    • 1. Linux内核层
      • 2. 系统运行库层
        • 3. 应用框架层
          • 4. 应用层
          • Android应用开发特色
            • 1. 四大组件
              • 2. 丰富的系统控件
                • 3.SQLite数据库
                  • 4. 强大的多媒体
                    • 5. 地理位置定位
                    • 搭建开发环境
                      • 创建第一个Android项目
                        • 运行第一个Android项目
                          • 2. 选择运行设备
                            • 分析第一个Android项目
                              • 1. 项目结构的分析
                            • 2. app目录的分析
                              • 3. 分析项目如何运行
                                • 3 如何引用res目录下的内容
                                  • 4 详解build.gradle文件
                                    • 掌握日志工具的使用
                                  • 活动是什么
                                    • 手动创建活动
                                      • 创建和加载布局
                                        • 注册活动以及配置主活动
                                        • 配置主活动的方法
                                        • 在活动中使用Toast
                                        • 在活动中使用Menu
                                        • 销毁活动
                                    相关产品与服务
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档