Android简述

259 阅读7分钟

1.Android中的应用程序都是Java开发的。

2.Android系统架构(四层架构)

  • Linux内核层

    Android操作系统是基于Linux开发的。这一层为Android设备的各种硬件提供了底层的驱动。

  • 系统运行库层

    • C/C++库为Android系统提供了主要的特性支持(数据库、3D绘图、浏览器内核等)。
    • Android运行时库。
      • 提供了一些核心库,能够允许使用Java语言来编写Android应用
      • Dalvik虚拟机(5.0系统之后改为ART运行环境),使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例
  • 应用框架层

    这一层主要提供了构建应用程序时可能用到的各种API。

  • 应用层

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

3.Android主要内容

  • 四大组件

    活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)、内容提供者(Content Provider

  • 丰富的系统控件

  • SQLite数据库

  • 地理位置定位

  • 强大的多媒体

  • 传感器

4.开发环境

  • JDK

    是Java语言的软件开发工具包,它包含了Java的运行环境、工具集合、基础类库等内容。

  • Android SDK

    是谷歌提供的Android开发工具包,用来提供Android相关的API

  • Eclipse+ADT(过时了)

  • Android Studio

5.创建项目

  • Application Name:代表应用名称
  • Project Name:代表项目名称
  • Package Name:代表项目的包名。包名具有唯一性:Android系统是通过包名来区分不同应用程序的
  • Minimum Required SDK:代表程序最低兼容的版本
  • Target SDK:代表在该目标版本上已经做过了充分的测试,系统不会再这个版本上做向前兼容的操作了
  • Compile With:代表程序将使用哪个版本的SDK进行编译
  • Theme:代表程序UI所使用的主题
  • Company Domain:代表公司域名
  • Project location:代表项目代码存放的位置

6.分析Android项目目录结构

  • Eclipse(过时了):

    • src:存放所有Java代码的地方

    • gen:存放的内容都是自动生成的。主要有一个R.java文件,在项目中添加的任何资源都会在其中生成一个相应的资源id

    • assets:存放一些随系统程序打包的文件,在程序运行时可以动态读取到这些文件的内容

    • bin:存放了一些在编译时自动产生的文件。其中会有一个当前项目编译好的安装包

    • libs:存放第三方Jar包,放在这个目录下的Jar包都会被自动添加到构建路径里去

    • res:存放项目中使用到的所有图片、布局、字符串等资源。

      子目录

      • drawable:存放图片
      • layout:存放布局
      • values:存放字符串
    • AndroidManifest.xml:整个Android项目的配置文件。用来注册程序中定义的所有四大组件、给应用程序添加权限声明、指定创建项目时指定的程序最低兼容版本和目标版本

    • project.properties:指定编译程序时所使用的SDK版本

  • Android Studio

    • .gradle和.idea: 存放的都是Android Studio自动生成的一些文件
    • app:存放项目中的代码、资源等内容
      • build:主要存放一些在编译时自动生成的文件
      • libs:存放项目中使用到的第三方Jar包。放在这个目录下的jar包都会被自动添加到构建路径里去
      • androidTest:用来编写Android Test测试用例的
      • java:存放所有Java代码的地方
      • res:存放在项目中使用到的所有图片、布局、字符串等资源
      • AndroidManifest.xml:整个Android项目的配置文件。用来注册程序中定义的所有四大组件,给应用程序添加权限声明
      • test:用来编写Unit Test测试用例
      • .gitignore:用于将app模块内的指定的目录或文件排除在版本控制之外
      • app.iml:IntelliJ IDEA项目自动生成的文件
      • build.gradle:app模块的gradle构建脚本,指定项目构建相关的配置
      • proguard-rules.pro:用于指定项目代码的混淆规则
    • build:主要存放一些在编译时自动生成的文件
    • gradle:主要存放gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle
    • .gitignore:用来将指定的目录或文件排除在版本控制之外的
    • build.gradle:项目全局的gradle构建文件
    • gradle.properties:全局的gradle配置文件
    • gradlewgradlew.bat:用来在命令行界面中执行gradle命令的。gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。
    • HelloWorld.iml:iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于IntelliJ IDEA开发的),用来标识这是一个IntelliJ IDEA项目
    • local.properties:用来指定本机中的Android SDK路径
    • settings.gradle:用来指定项目中所有引入的模板
  • 项目中的资源:res目录

    • 所有以drawable开头的文件夹

      放图片。(为了兼容各种设备,drawable-hdpi、drawable-xhdpi、drawable-xxhdpi)

    • 所有以mipmap开头的文件夹

      放应用图标。(为了兼容各种设备,mipmap-mdip、mipmap-hdip、mipmap-xhdip、mipmap-xxhdip、mipmap-xxxhdip)

    • 所有以values开头的文件夹

      放字符串、样式、颜色等配置

      • layout文件夹:放布局文件
      • menu文件夹:菜单文件
    • 使用这些资源:两种方式引用它们

      例如,string.xml中的字符串

      • 在代码中:R.string.key可以获得该字符串的引用
      • 在XML中:@string/key可以获得该字符串的引用 其他同理,只需将string部分替换(drawable、layout......)
  • 详解build.gradle文件

    • 最外层目录下的build.gradle文件
      • repositories闭包

        jcenter():jcenter是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上。声明jcenter()后就可以引用jcenter上的开源项目

      • dependencies闭包

        使用classpath声明了一个Gradle插件

    • app目录下的build.gradle文件
      • apply plugin

        有两个值可选。

        com.android.application表示这是一个应用程序模块,是可以直接运行的
        com.android.library表示这是一个库模块,只能作为代码库依附于别的应用程序模块来运行
        
      • android闭包:配置项目构建的各种属性

        • compileSdkVersion:指定项目的编译版本
        • buildToolsVersion:指定项目构建工具的版本
        • defaultConfig闭包
          • applicationId:指定项目的包名
          • minSdkVersion:指定项目最低兼容的Android系统版本
          • targetSdkVersion:指定的值表示项目在该目标版本上已经做过了充分的测试,系统将会为应用程序启用一些最新的功能和特性
          • versionCode:指定项目的版本号
          • versionName:指定项目的版本名
        • buildTypes闭包:指定生成安装文件的相关配置
          • debug闭包:指定生成测试版安装文件的配置

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

            minifyEnabled:指定是否对项目的代码进行混淆,true表示混淆,false表示不混淆
            proguardFiles:指定混淆时使用的规则文件,proguard-android.txt是在Android SDK目录下的,里面是所有项目通用的混淆规则;proguard-rules.pro是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则。
            
      • dependencies闭包:指定当前项目所有的依赖关系

        • 本地依赖:对本地的Jar包或目录添加依赖关系

          compile fileTree(dir: ‘libs’, include:[‘*.jar’])

            本地依赖声明,表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径当中
          
        • 库依赖:对项目中的库模块添加依赖关系

          compile project(‘:helper’),库依赖声明

        • 远程依赖:对jcenter库上的开源项目添加依赖关系

          compile ‘com.android.support:appcompat-v7:24.21’,远程依赖声明

            com.android.support是域名部分,用于和其他公司的库做区分
            appcompat-v7是组名称,用于和用一个公司中不同的库做区分
            24.2.1是版本号,用于和同一个库不同的版本做区分
          
        • testCompile:声明测试用例库

7.日志工具Log

日志工具类是Log(android.util.Log)

Log.v():verbose
Log.d():debug
Log.i():info
Log.w():warn
Log.e():error

Log.d(tag, msg):第一个参数tag,用于对打印信息进行过滤;第二个参数msg,想要打印的具体的内容