Android 第一行代码
Android 第一行代码
Android系统架构
- Linux内核层:Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层驱动。(驱动:驱动硬件动起来的程序)
- 系统运行库层:各种库,如C/C++库来为Android系统提供主要特性支持。如SQLite库提供了数据库的支持。
- 应用框架层:提供了构建应用程序时可能用到的各种API(应用程序编程接口,即平时说的接口),Android自带的一些核心应用就是用这些API来完成的。
- 应用层:所有安装在手机上的应用程序都是属于这一层的。
Android开发环境
- JDK:JDK是Java语言的软件开发工具包,它包含了Java的运行环境、工具集合、基础类库等内容。
- Android SDK:Android SDK是谷歌提供的Android开发工具包,在开发Android程序时,我们需要通过引入该工具包,来使用Android相关的API。
- Android Studio:很早以前安卓项目都是用Eclipse开发的,后谷歌推出一款官方的IDE Android Studio
Android目录结构
大目录结构
- .gradle和.idea:AS自动生成的一些文件,无需关心。
- app:项目中的代码、资源几乎都在这个目录之下,后面开发工作也是在这个目录之下,非常重要。
- build:包含编译时自动生成的一些文件。
- gradle:包含gradle wrapper配置文件(不太了解是干啥用的)
- .gitignore:用来将指定的目录或文件排除在版本控制之外
- gradle.properties:全局的gradle配置文件,在这里配置的属性会影响到项目中所有的gradle编译脚本。
- gradlew和gradlew.bat:这两个文件是用来在命令行界面执行gradle命令的。其中,gradkew是在Linux或Mac系统使用,gradlew.bat是在Windows系统中使用的。
- Begin.iml:iml是所有IntelliJ IDEA项目都会生成的一个文件,iml文件用于标识这是一个IntelliJ IDEA项目(Android Studio是基于IntelliJ IDEA开发的)。我们不需要修改这个文件任何内容。
- build.gradle:项目全局的gradle构建脚本。
- local.properties:这个文件用于指定本机中的Android SDK路径。通常不需要修改。
- settings.gradle:用于指定项目中所有引入的模块。?没太明白。
app目录下的结构
- build:这个目录和外层build目录类似,主要包含了一些在编译时自动生成的文件,无需过多关心。
- libs:项目中使用到的第三方jar包都会存放在该目录下,放到这个目录下的jar包都会被自动添加到构建路径里去。
- androidTest:此处用来编写Android Test测试用例,可以对项目进行一些自动化测试。
- java:存放所有Java代码的地方
- res:项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下。当然还会有很多子目录,比如专门存放图片的drawable目录,专门存放布局的layout目录等
- AndroidManifest.xml:整个项目的配置文件,程序中定义的所有四大组件都要在这个文件里注册,另外还可以在这个文件里给应用程序添加权限声明。以后会详细说明。
- test:用来编写Unit Test测试用例,是对项目进行自动化测试的另一种方式?
- .gitignore:用于将app模块内指定的目录或文件排除在版本控制之外,作用和外层的.gitignore类似。
- app.iml:IDEA项目自动生成的文件。
- build.gradle:app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。
- proguard-rules.pro:用于指定项目代码的混淆规则,比如代码完成开发后,不希望别人破解,便可通过此文件加密。
res目录结构
- drawable:用于存放图片
- layout:存放布局
- mipmap:用于存放应用图标
- values:存放字符串、样式、颜色等配置
这里,这么多drawable和mipmap文件是为了让程序能够更好的兼容各种设备。
那么如何引用这些资源?
- 在代码中通过R.string.app_name可以获得该字符串的引用。
- 在XML中通过@string/app_name可以获得该字符串的引用。
其中,string部分是可以替换的,具体取决于自己要引用的资源,如图片就修改成drawable。
详解build.gradle文件
外层目录下该文件
忽略语法,两处括号中都声明了jcenter()配置。jcenter其实是一个代码托管仓库,很多Android开源项目都会将代码托管到jcenter上,声明该配置后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
后面,dependencies闭包中使用classpath声明了一个Gradle插件。原因是Gradle并不是专门为构建Android项目而开发的,Java、C++等很多种项目都可以使用Gradle来构建。因此如果我们想使用它来构建Android项目,则需要声明这个插件,其中3.6.1是版本号。
app目录下该文件
第一行应用了一个插件,一般有两种值可选:
- com.android.application 表示这是一个应用程序模块
- com.android.library 表示这是一个库模块
应用程序模块与库模块最大的区别在于,一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。
接下来是一个大的android闭包,在这个闭包当中我们可以配置项目构建的各种属性。
- compileSdkVersion用于指定项目的编译版本。这里指定成29,表示使用Android 9.0系统的SDK编译。
- buildToolsVersion用于指定项目构建工具的版本。
然后后面在android闭包中又嵌套了一个defaultConfig闭包,其可以对项目的更多细节进行配置。
- applicationId 用于指定项目的包名。
- minSdkVersion用于指定项目最低兼容的Android系统版本,这里指定15表示最低兼容到Android 4.0系统。
- targetSdkVersion指定的值用于控制项目是否启用一些高版本的功能特性。比如Android 6.0系统可以查看图片,那么当你把这个数值写成23或者更高,系统就会为项目启用查看图片功能。但如果指定成22,那么你这个项目自然就不可以使用系统的新功能特性。
- versionCode用于指定项目的版本号。
- versionName用于指定项目的版本名。
下面来看buildTypes闭包。
buildTypes闭包用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug,一个是release。
- debug闭包用于指定生成测试版安装文件的配置。可忽略不写。
- release闭包用于指定正式版安装文件的配置。
下面是release闭包。
- minifyEnabled用于指定是否对项目代码进行混淆,true表示混淆,false表示不混淆。
- proguardFiles用于指定混淆时使用的规则文件。这里引用了两个文件,前者在Android SDK目录下,里面是所有项目通用的混淆规则。第二个是在当前目录的根目录下,可以编写当前目录特有的混淆规则。
后面是dependencies闭包。它可以指定当前项目所有的依赖关系。
通常Android Studio项目一共有3种依赖方式:本地依赖、库依赖、远程依赖
- 本地依赖可以对本地的Jar包或目录添加依赖关系。
- 库依赖可以对项目中的库模块添加依赖关系。
- 远程依赖则可以对jcenter库上的开源项目添加依赖关系。
这里第一行代码上的描述与实际项目不符,先留疑问。
日志工具的使用
- Log.v()
- Log.d()
- Log.i()
- Log.w()
- Log.e()
分别打印不同等级的调试信息。
在方法外,logt+TAB可以创建一个TAG常量,方法内,log?+TAB可以自动补全日志打印方法,且默认参数是TAG。
很有说法,以后尝试使用?
第一章的内容到此,还是学到了很多东西的。