第一行代码读书笔记(Chapter1开始启程,你的第一行Android代码)

1.1  了解全貌

1.1.1  Android系统架构

Linux内核层(Linux kernel)

Android基于Linux内核,该层为Android设备的硬件提供底层驱动

系统运行库层(Libraries+Android Runtime)

该层通过一些C/C++库为Android系统提供特性支持。

SQLite库,OpenGL|ES库(3D绘图支持),Webkit库(浏览器内核支持)

Android运行时库:核心库,允许开发者使用Java编写应用程序,

Android运行时库还包含Dalvik虚拟机,5.0后改为ART定制的虚拟机

它使每一个Android应用运行在独立进程中并拥有一个自己的虚拟机实例

应用框架层(Application Framework)

提供构建应用程序时可使用的API,Android自带的一些核心应用会使用,开发者也可用

应用层(Application)

所有安装在手机上的应用属于该层

Android5.0以上系统已占据超过85%Android市场份额

1.1.3 Android应用开发特色

四大组件

组件Description
Activity应用程序的门面,你看到的所有东西都在其中
Service后台默默运行(即使你退出)
BroadcastReceiver接收各处的广播,如电话、短信,也可向外发出广播
ContentProvider在应用程序之间共享数据(在应用中读取系统通讯录)

系统控件(界面)

UI界面,自带控件,也可自定义控件。

SQLite数据库

嵌入式关系型数据库,支持标准SQL语法,可通过Android封装的API进行操作。

多媒体

音乐拍照视频录像

1.2 搭建环境

1.2.1 工具

JDK:包含了Java的运行环境、工具集合、基础类库等内容。

Android SDK:Android开发工具包,通过引入该工具包来使用Android相关的API。

Android Studio:IDE

1.3.4 分析第一个Android程序

  • .gradle和.idea:自动生成

  • app:项目代码、资源等内容

  • build:编译时自动生成

  • gradle:使用gradle wrapper,会自动选择联网下载gradle

  • .gitignore:指定目录或文件,排除在版本控制外

  • build.gradle:gradle构建脚本

  • gradle.properties:全局gradle配置文件

  • gradlew和gradlew.bat:在命令行界面执行gradle命令,前在linux后在Windows

  • HelloWorld.iml:标识IDEA项目

  • local.properties:指定本机Android SDK路径

  • settings.gradle:指定项目引入的模块(一般是自动引入)

app目录结构

  • build:编译时自动生成

  • libs:存放第三方jar包(该目录下jar包会被自动添加到项目的构建路径中)

  • androidTest:编写测试用例,自动化测试

  • java:放Java和Kotlin代码(MainActivity)

  • res:图片放drawable、布局放layout、字符串资源String

  • Android-Manifest.xml:整个项目的配置文件,四大组件在此注册,添加权限声明

  • test:编写Unit Test测试用例

  • .gitignore:将app模块内指定目录或文件排除在版本控制外

  • app.iml:IDEA自动生成

  • build.gradle:app模块的gradle构建脚本,项目构建相关配置

  • proguard-rules.pro:对代码加密,打包成安装包文件时对代码混淆

项目怎样运行

1.Android-Mainfest.xml

四大组件必须在此注册!!!

<!-- 对MainActivity进行注册 -->
<activity android:name=".MainActivity">
    <intent-filter>
        
        <!-- 这是项目的主Activity,点击图标,首先启动的就是这个Activity -->
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    
    </intent-filter>
</activity>

2.MainActivity.java

/**
*  继承自AppCompatActivity,它是向下兼容的Activity的子类
*
*  自定义Activity必须继承Activity类或它的子类
*
**/
public class MainActivity extends AppCompatActivity {
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //为当前Activity引入一个activity_main.xml布局文件
        setContentView(R.layout.activity_main);
    }
}

3.布局文件activity_main.xml

res/layout目录下

逻辑与视图分离

1.3.5 详解res

drawable:图片

mipmap:放应用图标icon

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

layout:放布局文件

多个mipmap为了兼容不同分辨率的设备

应该自己创建drawable-hdpi,xhdpi,xxhdpi等目录

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

  • 在XML中通过@string/app_name可以获得该字符串的引用。

1.3.6  详解build.gradle文件

Gradle用于构建项目,基于Groovy的领域特定语言DSL,用于进行项目设置,摒弃XML

最外层的gradle文件

google():google自家的扩展依赖库

jcenter():第三方开源库

声明这两行配置后,就可以在项目中轻松引用任何google和jcenter仓库中的依赖库

dependencies闭包中使用classpath声明两个插件:一个Gradle插件和一个Kotlin插件。

Gradle不仅仅能用来构建Android项目,故需要声明;使用Kotlin就需要Kotlin插件

app中的gradle文件

plugin:插件,应用程序模块可直接运行,库模块只作为代码库依附其他应用程序模块运行

android闭包:配置项目构建的各种属性

defaultConfig闭包:配置项目的更多细节

applicationId:不可重复,默认包名

minSDKVersion:最低兼容Android系统版本

targetSdk:表示你在该目标版本上已做充分测试

versionCode:项目版本号

versionName:项目版本名

testInstrumentationRunner:启用JUnit测试,在当前项目中

buildTypes闭包:指定生成安装文件的相关配置

debug子闭包:指定生成测试版安装文件的配置(可忽略不写)

release子闭包:指定生成正式版安装文件的配置

minifyEnabled:指定是否对项目代码进行混淆

proguardFiles:指定混淆规则文件

<Android SDK>/tools/proguard/proguard-android-optimize.txt

项目根目录下的proguard-rules.pro,当前项目特有混淆规则

Android Studio直接运行项目生成的都是测试版安装文件

dependencies闭包:指定当前项目所有依赖关系

implementation fileTree:本地依赖声明,lib目录下.jar后缀文件

implementation:远程依赖声明,域名部分(公司).工程名部分(工程):版本号

Gradle构建项目时会先检查本地是否有这个库的缓存

implementationproject(':helper'):库依赖声明

testImplementation和androidTestImplementation:测试用例库

1.4 使用日志工具

android.util.Log

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

  • Log.d():打印调试信息,这些信息对你调试程序分析问题应该是有帮助的。对应级别debug,比verbose高一级。

  • Log.i():用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以来帮你分析用户行为的数据。对应级别info,比debug高一级。

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

  • Log.e():用于打印程序中的错误信息,比如程序进入了catch语句中。当有错误信息打印出来的时候,一般代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级。

在MainActivity.java文件中添加一句Log.d("MainActivity","onCreate execute");

tag用于过滤打印信息,msg打印具体内容

(一般传入当前类名)

程序运行后在Logcat中查看打印信息:包含日志内容、tag名、程序包名、打印时间、进程号

日志的好处

  1. 日志开关可控制

  2. 能添加日志标签

  3. 日志有级别区分

Logcat中的过滤器

目前只有3个过滤器:

  1. Show only selectedapplication:只显示选中程序的日志

  2. Firebase是Google提供的一个开发者工具和基础架构平台

  3. No Filters

  4. 自定义过滤器

自定义过滤器

Log Tag设置允许显示的日志的tag名称

Logcat日志级别

选中Verbose,不管用何种方法打印日志,都一定会显示

选中Debug,则只显示Debug及以上级别方法打印的日志

...

通过设置级别,只查看你关心的日志。如Error,查看崩溃信息日志。

关键字过滤

当用了过滤器+日志还不能锁定日志内容,通过关键字来显示相应日志,支持正则表达式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JonyJosda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值