安卓开发复习笔记(一)
第一章
安卓应用开发特色:
• 四大组件
Activity,Service,Broadcast Receiver,Content Provider
️• SQLite 数据库
轻量级,运算速度极快的嵌入式关系型数据库,不仅支持sql语句,还可以通过安卓封装好的API进行操作,让存储和读取数据变得特别方便。
• 地理位置定位
Android手机都内置GPS,结合强大的地图功能,LBS这一领域潜力无限。
需要准备的工具:
️Java JDK
️Android SDK
️Android Studio
Project结构模式下目录介绍:
无需更改区域:
️ .gradle & .idea 自动生成文件
️ build 编译时自动生成的文件
️ gradle
。。。一堆,不过多赘述
开发者设计区域:
【app文件夹下】
1. build
无需关心
️2. libs
使用到的第三方jar包都会放在libs目录下,放在这个目录下的jar包就会自动被添加到构建路径中去
️3. android Test
此处是用来编写Android Test 测试用例用的
️4. java
毫无疑问,所有java代码放置到该目录下
️5. res
项目中使用到过的所有图片、布局、字符串等资源都要存放在这个目录下。
①图片放在drawable目录下
②布局放在layout目录下
③字符串放在valves目录下
️6. AndroidManifest.xml
这是整个Android项目的配置文件,程序中定义的四大组件都要在这个文件中注册,另外还可以再择个文件中给应用程序添加应用权限声明。
7. test
自动化测试
️8. build.gradle
这是app模块的gradle构建脚本,这个文件会制定很多项目构建相关的配置
9. proguard-rules.pro
代码打包后如果不希望别人进行破解,通过这个文件让代码混淆,从而让阅读者难以阅读
首先了解一下AndroidManifest.xml文件的这个部分,从中可以找到这段代码:
这段代码用于对MainActivity这个活动进行注册,没有在AndroidMainfest内注册的活动是不能使用的。
往下出现两个<intent-filter>,其中的内容非常重要
这两行加起来的总效果就是MainActivity是这个项目的总活动,所谓总活动就是点击应用图标后进入的第一个活动。
标识符【.Main】
接下来看一下这段MainActivity.java中的代码,这是安卓四大组件中活动的代码。
凡是在应用中看得到的东西都是要放在Activity中的。
首先要注意MainActivity是继承AppCompatActivity类的,这是一种向下兼容的Activity
可以将Activity在各个版本中增加的特性和功能最低兼容到Android 2.1系统
Activity是Android系统提供的一个活动基类,我们项目中的所有活动必须继承它或者他的子类才能拥有活动特性。
这里AppCompatActivity就是Activity的子类。
然后注意到MainActivity中存在的 onCreate() 方法
这个方法是一个活动被创建时必须要执行的方法
注意onCreate函数中第二行代码:setContentView(R.layout.activity_main);
在这里我们要了解Android程序的设计其实是逻辑和视图是分离的
因此通用的做法是:在布局文件中编写界面,然后在活动中引进来
那么在此处就是这个setContentView()方法给当前的活动引入了一个main_activity布局。
布局文件都定义在res/layout目录下,activity_main.xml文件中你能看到以下代码:
android:text="Hello World!";便是HelloWorld的出处。
接下来我们来了解一下build.gradle这个文件。
不同于Eclipse,Android Studio是采用Gradle来构建项目的。
Gradle是一个非常先进的项目构建工具
它使用了一种基于Groovy(我也不知道这是啥,厉害就完事了)的领域特定语言(DSL)来声明项目设置
摒弃了传统基于XML的各种繁琐配置。
仔细观察会发现有两个build.gradle文件,一个是最外层的,一个是app目录下的。
先讨论最外层的build.gradle文件
这些代码都时自动生成的,虽然与法比较难,只看最关键的部分,难度不大。
两处repositories闭包中都声明了jcenter()这行配置
jcenter()其实是一个代码管理仓库
很多Android开源项目都会将代码托管到jcenter上
声明了这行配置之后,我们就可以轻松地引用任何jcenter上的开源项目了。
接下来,dependencies闭包中使用了classpath声明了一个Gradle插件。
声明这个插件的意义在于Gradle不仅仅服务于Android项目,还有Java,C++等。
因而我们想要使用它就需要声明此插件。
这样外层build.gradle文件中的要点就分析完了,通常情况下并不需要修改这个文件中的内容。
除非你想添加全局的项目构建配置。
再来看一下app目录下的build.gradle文件:
我们来一行一行分析:
首先第一行应用了一个插件,一般有两种值可以选:
① com.android.application 表示这是一个应用程序模块。
② com.android.library 表示这是一个库模块。
应用程序模块和库模块的最大差别在于,应用程序模块是可以直接运行的,而库模块只能作为依附于别的应用程序模块来进行。
接下来是一个大的 android闭包
在这个闭包中,我们可以配置项目构建的各种属性,同样在编辑器或者SDK更新的时候编译器出现故障时,这里也是故障发生的集中地。
1. compileSdkVersion 用于指定项目的编译版本。
2. buildToolVersion 用于指定项目构建工具的版本。
3. defaultConfig 闭包
在这个闭包中可以对项目中的更多细节进行配置,其中
① applicationID 用于指定项目的包名,在创建项目的时候应该已经指定过包名了,如果想更改,要在这里更改。
② minSdkVersion 用于指定项目最低兼容的Android系统版本
③ targetSdkVersion 指定的值表示你在该目标版本上已经做了充分的测试,如果测试的版本号较低,较高版本的某些运行时功能权限不会对App开放
④ versionCode & versionName 用于指定项目的版本号和版本名,这两个文件在生成安装文件的时候非常重要!
4. buildTypes 闭包
用于指定生成安装文件的相关配置,通常只会由两个子闭包,一个是debug,另一个是release。
debug闭包用于制定生成测试版安装文件的配置,可以忽略不写的
release闭包用于指定生成正式版安装文件的配置,下面详细介绍一下。
① minifyEnabled 用于指定是否对项目的代码进行了混淆(加密)
② proguardFiles 用于指定混淆时的规则文件,这里指定了两个文件:
第一个 proguard-android.txt 是在Android SDK目录下的,里面是所有项目通用的混淆规则
第二个 proguard-rules.pro 是在当前项目根目录下的,里面可以编写当前项目的特有的混淆规则
这样,整个 android 闭包 中的内容就都分析完了。
接下来还剩一个 dependencies 闭包 ,这个闭包非常强大,它可以指定当前项目所有的依赖关系
通常 Android Studio 项目一共有三种依赖类型:本地依赖、库依赖、远程依赖。
本地依赖可以对本地的 jar包 或者 目录 添加依赖关系
库依赖可以对项目中的库模块添加依赖关系
远程依赖可以对 jcenter 库上的开源项目添加依赖关系。
下面来介绍一下 dependencies 闭包中的配置
1. compile fileTree
是一个本地依赖声明,它表示将libs目录下所有 .jar 后缀的文件都添加到项目的构建路径当中。
2. compile
是远程依赖声明,后边标明远程依赖库、域名、组名称、版本号。
安卓日志工具 Log:
1. Log.v() 用于打印那些最为琐碎的,意义最小的日志信息,对应级别verbose。日志级别最低
2. Log.d() 用于打印一些调试信息,调试程序常用,对应级别debug,比verbose高级一些
3. Log.i() 用于打印一些比较重要的数据,这些数据是开发者非常想要看到的、可以帮你分析数据行为数据。对应级别info,比debug级别高一些
4. Log.w() 用于打印一些警告信息,提示程序在这个地方可能会出现一些潜在的风险,最好去修复一下这些出现警告的地方,对应级别warn,比info高一级
5. Log.e() 用于打印程序中的错误信息,比如程序进入到了catch语句中,当有错误信息打印出来的时候,一般都代表你的程序出现了严重错误,对应级别error,比warn高一级
如图所示,可以根据等级筛选日志。
我们在MainActivity.java中加入此调试代码
Log.d(tag,msg); 调试方法有两个参数,第一个是标签,第二个是调试信息。
此处关于标签要强调,logcat中可以很轻松地添加过滤器。
下图是系统给的默认过滤器
接下来就让我们尝试自己创建一个过滤器,点击上图中的Edit Filter Configuration,出现下图创建界面,
给filter起名后,通过更改Lag Tag为“data”(自定义),再将调试信息第一个参数改为data即可实现只显示特定调试。
日记级别控制的好处就是能方便快捷地找到你所关心的那些日志。
第一章完成啦~~~