1.0 安卓学习之开始启程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwz45698752/article/details/81736798

前言

参考书:第一行代码
开发环境:AS


安卓历史

  • 安卓公司被Google收购
  • 安卓OS基于Linux开发
  • 安卓操作系统2010年被Linux团队从Linux内核主线中除名
  • 安卓OS代码开源,可自由使用和定制(如Flyme系统)
  • Google为安卓建立了完善的生态系统
  • 安卓5.0版本用ART运行环境替代了Dalvik虚拟机,提升运行速度

安卓系统架构

分为四层架构,具体见书

  • Linux内核层
    安卓系统是基于Linux内核,该层为安卓设备的各种硬件提供底层驱动
  • 系统运行库层
    • 该层通过一些C++/C库为安卓系统提供了主要的特性支持,如SQLite库提供数据库的支持
    • 该层还有安卓运行时的库,包括一些核心库,ART运行环境
      (使得每个APP运行在独立的进程当中,拥有自己的Dalvik虚拟机【相较于JVM,优化后更适合移动设备】实例)
  • 应用框架层
    提供了创建APP的API
  • 应用层,例如各类APP

安卓四大组件

  • 活动:APP中看得到的东西都放在活动中
  • 服务:后台运行,即使退出也可能在运行
  • 广播接收器:允许应用接收或发送广播消息,如电话,短信
  • 内容提供器:为APP间共享数据提供可能,如读取电话簿的联系人

除了四大组件,还有SQLite数据库(轻量级运算速度极快的嵌入式关系型数据库),LBS(基于位置的服务),多媒体(音乐),系统控件(button等)


创建安卓项目

  • 公司域名:example.com
  • 安卓系统通过包名区分APP,所以要有唯一性
  • 最小版本SDK设置为API 15可覆盖98%的移动设备
  • 命名规范: 活动名HelloWorld 布局名 hello_world_layout
  • tips
    • 锤子:编译项目
    • 下拉列表:选择运行哪个项目
    • 三角形:运行项目

Android项目结构

  • Gradle目录下包含了gradle wrapper的配置文件,使用该方式不需要提前将gradle下载好,而会自动根据本地的缓存情况决定是否下载,默认不启用该方式
  • Gitignore为版本控制文件,将某些文件排除在版本控制之外
  • Build. Gradle:项目全局的gradle构建脚本,不需修改(项目类型)
  • Gradle.properties是全局的gradle配置文件,在这里配置的属性会影响项目中所有的gradle编译脚本
  • local.properties指定安卓SDK的位置,会自动生成,除非改变位置,一般不修改
  • Settings. Gradle指定项目中所有引入的模块,自动完成,不需手动修改

APP目录下内容

1) Libs:项目中使用到第三方包,将jar包放入该目录下,则这些包自动添加到构建路径中
2) AndroidManifest.xml:安卓项目的配置文件 首先用于注册四大组件,四大组件一定要注册后才能使用,其次添加APP权限
3) build.gradle:APP模块的构建脚本,指定构建时配置
4)res目录下包括drawable目录(图片),layout目录(布局),values目录(字符串,样式,颜色),mipmap(应用图标)
5)Build. Gradle:app模块的gradle构建脚本,指定项目构建的相关配置

AndroidManifest.xml

<activity android:name=".MainActivity" android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

指定该活动为主活动,首先启动的活动


android:icon="@mipmap/ic_launcher"//指定应用图标
android:label="@string/app_name"  //指定应用名称

活动基类

在这里插入图片描述

引用项目的字符串

在这里插入图片描述

  • 引用其他资源,string同理可替换为drawable,mipmap
  • setContentView()方法为当前活动引入布局

build.gradle文件(两个)

  • AS采用gradle构建项目
  • Gradle是项目构建工具
  • 该项目构建工具使用一种基于groovy的DSL(领域特定语言)来声明项目配置,摒弃基于XML(如Ant和Maven)的各种繁琐配置

外层文件

  • 参考build.gradle

  • 不需要修改,除非添加全局的项目构建配置

内层文件

  • 参考build.gradle
  • 关于目标版本:该项指明的版本值表明你在该版本进行充分测试,则系统会为你APP引入该版本所对应的最新特性和功能,否则就不引入
  • 通过AS生成的APK文件都是测试版APK文件

repositories {
jcenter()
maven { url “https://maven.google.com” }
maven { url “https://jitpack.io” }
}
闭包中声明jcenter()这行配置,jcenter()是代码托管仓库,声明后可以用该仓库的开源项目


classpath ‘com.android.tools.build:gradle:2.2.2’
表示gradle来构建的是安卓项目


defaultConfig {
    applicationId "com.bestlucky.graph" 指定项目包名
    minSdkVersion 15
    targetSdkVersion 27
    versionCode 1  项目版本号
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {指定生成APK的配置
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ 项目混淆规则
} }

dependencies闭包

指定项目依赖关系,共三种

在这里插入图片描述

dependencies { 
        compile fileTree(dir: 'libs', include: ['*.jar'])
       //属于本地依赖(本地的jar包或目录)
       androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:27.+'
    //属于远程依赖,对jcenter库上的开源项目添加依赖关系
        compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'    
        //属于远程依赖,对jcenter库上的开源项目添加依赖关系
        testCompile 'junit:junit:4.12'
        //声明测试用例库
    }

安卓日志工具Log

Log.v():打印最为琐碎的、意义最小的日志信息。(verbose)

Log.d():打印调试信息。(debug)

Log.i():打印重要的日志信息。(info)

Log.w():打印一些警告信息。(warn)

Log.e():打印程序中的错误信息。(error)

Log.d(tag,msg);可以看见进程号
Logt+tab的快捷键,快速日志记录

总结与重点

  • 安卓系统架构四部分
  • APP目录下内容(libs,res,AndroidManifest.xml,gitignore,build.gradle)

第二章:
1)活动是可以包含UI的组件,主要用于和用户交互
Launcher activity:将当前活动设置为主活动
2)Backwards compatibility表示为项目启用向下兼容的模式
3)在XML中引用一个ID,使用@id/id_name的语法
定义一个ID,则为@+id/id_name
4) setContentView方法给当前活动加载一个布局,参数为布局文件的ID(如R.layout.first_layout)
5) 项目中添加的任何资源都在R文件中生成相应的资源ID
6) 所有活动在AndroidManifest.xml中注册才能生效
活动的注册声明放在标签内,通过标签来对活动进行注册(–:name指明哪个活动)
配置主活动通过标签
Android:label:指定活动中标题栏的内容和APP名称
7) 若APP中未声明任何活动为主活动,则表示该程序作为第三方服务供其他应用在内部调用,如快捷支付服务
8) 静态方法Maketext创建一个toast对象,该方法要求传入三个参数,第一个参数为上下文,活动本身就是上下文对象
9) findViewById()获取布局文件中元素实例
10) 重写方法ctrl+O快捷键
11) Res下创建menu文件夹,作为菜单(右上角小点)资源文件,该资源文件中标签来创建具体的某个菜单项
12) getMenuInflater().inflate(R.menu.main,menu);
getMenuInflater()得到MenuInflater对象,调用该对象的inflate方法,给当前活动创建菜单,return true表示允许创建的菜单显示出来

11)public boolean onOptionsItemSelected(MenuItem item)///P40
重写该方法,定义菜单项的逻辑处理

13) 销毁活动
Finish()方法销毁当前活动,同按下back键,直接调用
14) INTENT是Android程序各组件交互的方式,可以指明组件需要执行的动作以及在各个组件间传递数据
15) 显式intent:(指明具体的activity)
Intent构造器:第一个参数是启动活动的上下文,第二个是要启动的活动
隐式intent:
指定抽象的action和category信息,系统分析帮我们找到活动,这些信息在标签中书写,只有当限定条件都满足才能响应intent
利用intent的另一个构造函数,把action的字符串传入,每个intent只能指定一个action却能指定多个category
利用隐式intent启动其他系统程序,setData()方法接收一个URL对象(字符串传递到parse方法中解析产生),指定当前intent正在操作的数据
利用intent传递数据

猜你喜欢

转载自blog.csdn.net/lwz45698752/article/details/81736798