1. Android 系统架构

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

Linux内核层:

提供驱动:显示驱动、音频驱动、照相机驱动、蓝牙驱动、wifi驱动、电源管理等。

系统运行底层:

通过C/C++库来为Android系统提供了主要的特性支持:如SQLite库提供了数据库的支持,OpenGL/ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。
Android运行时库,提供了一些核心库,能够允许开发者运用java语言来编写Android应用(包含了Dalvik虚拟机(5.0系统之后改为ART运行环境))。

应用框架层:

提供了构建应用程序时可能用到的各种API,Android自带的核心应用就是使用这些API完成的。

应用层:

安装在手机上的各种应用程序都属于这一层:系统自带的联系人、短信等程序等。

2. Android已发布的重要版本(开发应用程序兼容到4.0即可,即可占据98%的市场份额)

Android 3.0 专为平板电脑设计
Android 4.0 不再对手机和平板进行差异化区分,既可以应用在手机上,也可以应用在平板上。
Android 5.0 用ART运行环境代替了Dalvik虚拟机提高运行速度;提出Material Design的概念优化界面设计。(同时推出了AndroidWear AndroidAuto Android TV系统应用在可穿戴设备、汽车、电视领域)
Android 6.0 加入运行时权限功能
Android 7.0 加入多窗口模式功能

3. Android应用开发特色

四大组件:

Acitivity(凡是看得见的都在activity里)
Service(低调:退出了应用,也可以在后台运行)
BroadcastReceiver(允许应用程序接收各处的广播信息,比如电话、短信等;当然也可以向外发出广播信息)
ContentProvider(为应用程序之间共享数据提供了可能,比如读取系统电话薄中的联系人等)

丰富的系统控件:
SQLite数据库(轻量级、运算速度极快,支持标准的SQL语法、还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便)
强大的多媒体(音乐、视频、录音、拍照、闹铃等)
地理位置定位(结合地图LBS这一领域潜力无限)

4. 准备所需要的工具

JDK (1.8)
AndroidSDK
AndroidStudio (2.2) 13年推出的

5. AndroidStudio 目录结构

Project下:
  1. gradle和idea(自动生成的文件无需关心不要去编辑)
  2. app(项目中的代码和资源存放目录)
  3. build(自动生成的文件不需要过多关心)
  4. gradle(包含了gradle wrapper的配置文件,默认不启动gradle wrapper的方式,如需要打开File-Settings-Build,Execution,Deployment-Gradle进行配置)
    第三方的库导入的时候发现特别慢,肯定是去网上加载gradle了,此时应该配置gradle为本地路径。
  5. gitignore(排除版本控制的指定目录或文件)
  6. build.gradle(项目全局的gradle构建脚本,无需修改)
  7. gradle.properites(全局的gradle配置文件,配置的属性会影响到项目中所有的gradle编译脚本)
  8. gradlew和gradlew.bat(用来在命令行界面中执行gradle命令的,前者是mac linux,后者是windows)
  9. HelloWorld.iml(自动生成无需关心)
  10. local.properties(指定本机的SDK路径,自动生成不需修改,除非本机的sdk位置发生变化)
  11. settings.gradle(指定项目中所有引入的模块)
    如果你发现你删除某项文件夹或者文件一直删除不了,可以来这里看看它的名字是否在,删除后即可完全删除。
app下:
  1. build(自动生成无需关心)
  2. libs(第三方jar包)
  3. androidTest(编写AndroidTest测试用的)
  4. java(存放代码的地方)
  5. res(存放资源的地方,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下)
  6. AndroidManifest.xml(配置文件:注册四大组件、添加权限声明等)
  7. test(编写UnitTest测试用的)
  8. gitgnore(排除版本控制的指定目录或文件)
  9. app.iml(自动生成无需关心)
  10. build.gradle(app模块的gradle构建脚本,根据需要更改)
  11. proguard-rules.pro(存放混淆规则)

6. 详解项目中的资源

res/values/strings.xml文件内容:

<resources>
<string name = "app_name">hello world</string>
</resources>

引用它有两种方式:
1. 代码中:R.string.hello_world
2. XML中:@string/helloworld

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

7. 详解build.gradle文件

最外层的(通常不需要修改,除非想添加一些全局的项目构建配置):

buildscript{
    repositories{
        jcenter()----------托管仓库:声明这个配置后就可以轻松使用jcenter上的开源项目了
    }
    dependencies{
        classpath ‘com.android.tools.build:gradle:2.2.0’-----------
        Gradle插件:Java或C++很多项目都可以使用Gradle构建,想要用它来构建Android项目,
        则需要声明该插件,最后的部分是插件的版本号
    }
}

allprojects{
    repositories{
        jcenter()
    }
}

最内层的:

apply plugin: 'com.android.application'-------应用了一个插件,一般两种值可选:  
一个是'com.android.application'叫应用程序模块,可以直接运行.
一个是'com.android.library'是一个库模块,只能作为代码库依附于别的应用程序模块来运行.  

android { ---用来配置项目构建的各种属性
    compileSdkVersion 24     编译的版本
    buildToolsVersion '24.0.0'  项目构建工具的版本

    defaultConfig {---对项目的更多细节做配置 
        applicationId "com.beidou.chinapower"   包名 可以在这里进行修改
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1      版本号
        versionName "1.0"  版本名
    }
    buildTypes { 
    里面两个闭包,
    一个是debug闭包(用于指定生成测试版安装文件的配置),
    一个是release闭包(用于指定生成正式版安装文件的配置),前者可以忽略不写
        release {
            minifyEnabled false   是否进行混淆(true代表添加)
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 
            'proguard-rules.pro' 
            proguardFiles用于指定混淆时使用的规则文件,这里指定了两个文件,前者是SDK目录下,
            所有项目通用的混淆规则,后者是当前项目的根目录下,可以编写当前项目特有的混淆规则
        }
    }
}

dependencies { 用于指定当前项目所有的依赖关系(本地依赖 库依赖 远程依赖)
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    本地依赖,表示libs下.jar结尾的都构建到项目中
    testCompile 'junit:junit:4.12'  测试用例库,不关心
    compile 'com.android.support:appcompat-v7:24.2.0'  
远程依赖(两个部分:域名部分+组名称+版本号,域名部分作用是区分不同公司的库,组名称用于区分同一公司
不同的库,版本号部分用于区分同一个库不同的版本);先从缓存读取,没有的话去网上下载
    compile project(':pulltorefresh')   库依赖(pulltorefresh是库模块名字)
}

8. 为什么不使用System.out

日志打印不可控制;打印时间无法确定;不能添加过滤器;日志没有级别

Logo

开源、云原生的融合云平台

更多推荐