接下来会同步开启android的学习。并且写一系列的学习笔记。本博文先来介绍一下Android Studio的安装以及java的基本语法和android的概述。(在本博文对应的资源中,给出了JDK以及android studio的安装包)
目录
安装Android Studio
安装JDK
下载与安装
环境变量配置
Android Studio
配置Android studio及hello world
目录介绍
.gradle和.idea
gradle
.gitignore
build.gradle
gradle.properties
gradlew和gradlew.bat
demo.iml
local.properties
settings.gradle
app
分析helloworld项目的运行
AndroidManifest.xml文件
MainActivity文件
Hello World!在哪里定义?
项目中的资源
修改应用程序的名称及图标
build.gradle文件
最外层build.gradle文件
app目录下的build.gradle文件
Java编程的简易了解
Java 虚拟机——JVM
JRE和JDK
HelloWorld
Java基本语法
基于android studio的java开发
方法的定义与调用
条件语句
循环语句
switch case语句
Java 修饰符
其他
Java开发参考资料
Android概述
Android 架构
Linux Kernel (linux 内核层)
系统运行库层——Libraries(程序库)
系统运行库层——Android Runtime
Application Framework(应用框架层)
Application (应用层)
Android 应用程序组件
Activities
Services
Broadcast Receivers
Content Providers
系统控件
SQLite数据库
Android开发所需的工具
JDK
Android SDK
Android studio
参考资料
以前曾经学过一段时间的android 开发,当时采用的是eclipse、而现在由于google已经推出了其集成开发工具android studio,停止了对Eclipse的支持,为此大部分都采用android studio了~
安装Android Studio前先安装JDK
下面来安装JDK,进入网站如下图所示 (https://www.oracle.com/downloads/)
如上图所示,Java SE Development Kit 11.0.6是LTS,所以我们选11,安装Windows版本
只有Windows 64位。需要勾选接受。同时需要创建账户
下载成功后就可以安装了。
一般情况下建议路径不要有中文,最好也不要有空格(因为可能出现乱码);最好别安装到C盘。但是由于本人的只有一个固态硬盘就直接安装了哈~
很快就安装完了
java程序就在里面的bin
直接点击会发现,一闪而过~打开cmd
输出一系列信息(java安装成功了)
但是直接输入java是不行的
安装好的jdk需要进行环境变量的配置。
我使用的是Win10的系统,“此电脑/计算机”右键 “属性”,进入“高级系统设置”
然后进入“环境变量”的设置,新建所需的 环境变量(记得要在“系统变量”里面创建)
点击新建
输入,然后确定
然后修改path
点击编辑文本将“%JAVA_HOME%\bin”加入Path的变量值中。然后重启CMD窗口后输入java
完成路径匹配
首先搜索android studio,第一个就是了
下载后开始安装
安装完后,接下来进行一系列的设置,选择第二个
不发送。然后要进行setup
并没有代理(proxy)
所以只能回到上一个界面点cancel了
采取标准安装(发现更改不了位置,换为custom)
习惯选择黑色风格
下方安装路径如果需要更改的话。一定要改为没有标点符号,(空格之类千万不要有,另外,中文不能出现!!!!!本文所有路径,不能出现中文!!!!新手按照我的去安装就好,就不需要费心改变了)
这里显示已经安装好了???
然后cancel
如下图所示,应该是SDK没有配置好
点击上图中的Start a new Android Studio project新建一个工程,进入下面的界面,
会发现没有配置好Android SDK。由于上面的安装包是不包含SDK的
直接去http://tools.android-studio.org/index.php/sdk下载SDK
再把SDK安装到C:UsersusernameAppDataLocalAndroidSdk
这个版本的SDK太低了。。。。
cnmd,做了各种尝试,然后重启一下电脑,终于可以了。。。。。
修改一下文件名
纠结了半天。。。。点击finish就可以下载了
终于可以了!!!!!
选择一个empty activity
在这里的name其实就是application name,应用程序的名称。此应用安装到手机之后会在手机上显示该名称。Android系统就是通过包名来区分不同应用程序的,因此包名一定要有唯一性。Android studio会根据应用名称和公司域(就是example.com)名来自动帮我们生成合适的包名。location就是项目代码存放的位置了。
Minimum SDK就是项目最低的兼容版本。
如下图所示
点击下方的build会发现在一直进行一系列的配置
等了比较久,终于加载好了
在程序运行前。还必须要有一个运行的载体,可以是一部Android手机,也可以是Android模拟器。这里我们暂时先使用模拟器来运行程序。添加模拟器,第一次运行需要先创建一个新的模拟器
可以看到目前我们的模拟器列表中还是空的。点击Create Virtual Device按钮就可以立刻开始创建了,如下所示
继续选择图片素材
需要下载1个G左右!
完成!
下面一步改名无关紧要直接完成即可!
此时前面那个选择虚拟设备画面已经有了一个设备,进行勾选!
配置一下
可以看到,现在模拟器列表中已经存在一个创建好的模拟器设备了,点击Actions栏目中最左边的三角形按钮即可启动模拟器。模拟器会像手机一样,有一个开机过程,启动完成之后的界面,如图下图所示。
上图中左边的锤子按钮是用来编译项目的,中间的下拉列表是用来选择运行哪一个项目的,通常app就是当前的主项目,右边的三角形按钮是用来运行项目的。
然后在MainActivity的同级目录,新建一个hello.java,然后做一个简单的实现,
package com.example.demo;
public class hello {
public static void main (String[] args) {
System.out.println("Hello, world!");
}
}
使用android studio自带的Terminal进入该hello.java所在目录,执行,
javac hello.java
然后运行则有
HelloWorld项目运行成功!并且你会发现,模拟器上已经安装上demo这个应用了。打开启动器列表,如图所示。
然后会发现一个问题就是,这里的helloworld是Android studio生成的,并不是我们上面敲的代码hhhh。再次回到目录下
任何一个新建的项目都会默认使用Android模式的项目结构,但这并不是项目真实的目录结构,而是被Android Studio转换过的。这种项目结构简洁明了,适合进行快速开发,但是对于新手来说可能并不易于理解。点击图中的Android区域可以切换项目结构模式,如图所示。
这两个目录下放置的都是Android Studio自动生成的一些文件,我们无须关心,也不要去手动编辑。
这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。Android Studio默认没有启用gradle wrapper的方式,如果需要打开,可以点击Android Studio导航栏→File→Settings→Build, Execution, Deployment→Gradle,进行配置更改。
这个文件是用来将指定的目录或文件排除在版本控制之外的。
这是项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改的。
这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
这两个文件是用来在命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。
iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于IntelliJ IDEA开发的),用于标识这是一个IntelliJ IDEA项目,我们不需要修改这个文件中的任何内容。
这个文件用于指定本机中的Android SDK路径,通常内容都是自动生成的,我们并不需要修改。除非你本机中的Android SDK位置发生了变化,那么就将这个文件中的路径改成新的位置即可。
这个文件用于指定项目中所有引入的模块。由于HelloWorld项目中就只有一个app模块,因此该文件中也就只引入了app这一个模块。通常情况下模块的引入都是自动完成的,需要我们手动去修改这个文件的场景可能比较少。
项目中的代码、资源等内容几乎都是放置在这个目录下的,除了app目录之外,大多数的文件和目录都是自动生成的,我们并不需要进行修改。我们后面的开发工作也基本都是在这个目录下进行的。
build
这个目录你也不需要过多关心,它主要包含了一些在编译时自动生成的文件。
libs
如果你的项目中使用到了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
androidTest
此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
java
毫无疑问,java目录是放置我们所有Java代码的地方,展开该目录,你将看到我们刚才创建的HelloWorldActivity文件就在里面。
res
这个目录下的内容就有点多了。简单点说,就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下。当然这个目录下还有很多子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下,所以你不用担心会把整个res目录弄得乱糟糟的。
AndroidManifest.xml
这是你整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。由于这个文件以后会经常用到,我们用到的时候再做详细说明。
test
此处是用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。
.gitignore
这个文件用于将app模块内的指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。
app.iml
IntelliJ IDEA项目自动生成的文件,我们不需要关心或修改这个文件中的内容。
build.gradle
这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。
proguard-rules.pro
这个文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读。
其中的代码块:表示对MainActivity这个活动进行注册。没有在在AndroidManifest.xml里注册的活动是不能使用的。
其中intent-filter 里的两行代码非常重要,
那么MainActivity又是有什么用的呢?活动是Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。因此你在上图中看到的界面,其实就是MainActivity这个活动。
打开文件,代码如下
package com.example.demo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
首先我们可以看到,MainActivity是继承自AppCompatActivity的,这是一种向下兼容的Activity,可以将Activity在各个系统版本中增加的特性和功能最低兼容到Android 2.1系统。
Activity是Android系统提供的一个活动基类,我们项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性(AppCompatActivity 是Activity的子类)。然后可以看到MainActivity中有一个onCreate() 方法,这个方法是一个活动被创建时必定要执行的方法,其中只有两行代码,并且没有Hello World!的字样。那么之前app中显示的Hello World!是在哪里定义的呢?
其实Android程序的设计讲究逻辑和视图分离,因此是不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。可以看到,在onCreate() 方法的第二行调用了setContentView() 方法,就是这个方法给当前的活动引入了一个activity_main布局,那Hello World!一定就是在这里定义的了!我们快打开这个文件看一看。
在res、layout中有:
直接点开是这样的:
切换到text视图
代码如下:
终于找到hello world的定义了
回到Android模式
任何一个新建的项目都会默认使用Android模式的项目结构,但这并不是项目真实的目录结构,而是被Android Studio转换过的。这种项目结构简洁明了,适合进行快速开发,。点击下图当中的Android区域可以切换项目结构模式。
好,继续在project模式下。展开res目录有
之所以有这么多mipmap开头的文件夹,其实主要是为了让程序能够更好地兼容各种设备。在制作程序的时候最好能够给同一张图片提供几个不同分辨率的版本,分别放在这些文件夹下,然后当程序运行的时候,会自动根据当前运行设备分辨率的高低选择加载哪个文件夹下的图片。
打开res/values/strings.xml文件,内容如下所示:
demo
可以看到,这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它。
打开AndroidManifest.xml文件,找到如下代码:
。。。
。。。
对应的图标可以找
Android Studio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(如Ant和Maven)的各种烦琐配置。项目中有两个build.gradle文件,一个是在最外层目录下的,一个是在app目录下的。这两个文件对构建Android Studio项目都起到了至关重要的作用。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()//是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.2'
//使用classpath 声明了一个Gradle插件。
//如果想要用gradle来构建Android项目需要声明这个插件,最后的就是版本号啦
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()//是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
这些代码都是自动生成的,虽然语法结构看上去可能有点难以理解,但是如果我们忽略语法结构,只看最关键的部分,其实还是很好懂的。(看注释)
apply plugin: 'com.android.application'
//第一行应用了一个插件。一般可以选择:
//1、com.android.application 表示这是一个应用程序模块
//2、com.android.library 表示这是一个库模块
//两者的最大区别是:一个是可以直接运行的;一个只能作为代码库依赖于别的应用程序来运行
//下面是一个Android包,用于配置项目构建的各种属性
android {
compileSdkVersion 29 //用于指定项目的编译版本
buildToolsVersion "29.0.3" //用于指定项目构建工具的版本
defaultConfig { //对项目的更多细节进行配置
applicationId "com.example.demo"//用于指定项目的包名
minSdkVersion 16 //用于指定项目最低兼容的Android系统版本
targetSdkVersion 29 //指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。
versionCode 1 //指定项目的版本号
versionName "1.0" //指定项目的版本名
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes { //用于指定生成安装文件的相关配置
release { //用于指定生成正式版安装文件的配置
minifyEnabled false ////////用于指定是否对项目的代码进行混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //指定混淆时使用的规则文件
}
//除了release包还有debug包(可以忽略不写)。用于指定生成测试版安装文件的配置
}
}
dependencies { //指定当前项目所有的依赖关系.一般有三种依赖:本地依赖、库依赖和远程依赖
//本地依赖可以对本地的Jar包或目录添加依赖关系
//库依赖可以对项目中的库模块添加依赖关系
//远程依赖则可以对jcenter库上的开源项目添加依赖关系
implementation fileTree(dir: 'libs', include: ['*.jar'])
//一个本地依赖声明,它表示将libs目录下所有.jar后缀的文件都添加到项目的构建路径当中
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
安卓开发是基于java的。但是感觉跟CPP类似,所以本人仅仅打算简单的了解一下基本的语法就尽快的开始android开发了
Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。
Java分为三个体系:
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名以取消其中的数字"2":J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME。
Java Virtual Machine,JVM是运行所有java程序的假想计算机,是java程序的运行环境,是java最具吸引力的特性之一,我们所编写的java代码都运行在jvm之上。通过JVM来实现跨平台。编写的程序运行在jvm上,而jvm运行在操作系统上。
那么,如果我们只是想运行一个java程序,只需要JRE就可以了,但是如果我们希望开发java程序就需要JDK
三者的关系如下所示
上面已经介绍过JDK的安装
java开发的步骤
将文件命名如下
编写hello world
public class HelloWorld {
public static void main (String[] args) {
System.out.println("Hello, Java!");
}
}
然后运行javac
javac HelloWorld.java
java HelloWorld
javac 后面跟着的是java文件的文件名,例如 HelloWorld.java。 该命令用于将 java 源文件编译为 class 字节码文件,如: javac HelloWorld.java。运行javac命令后,如果成功编译没有错误的话,会出现一个 HelloWorld.class 的文件。
java 后面跟着的是java文件中的类名,例如 HelloWorld 就是类名,如: java HelloWorld。注意:java命令后面不要加.class。
然而,却报错了n次
C:\>javac HelloWorld.java
HelloWorld.java:1: 错误: 写入HelloWorld时出错: C:\HelloWorld.class
public class HelloWorld {
^
1 个错误
有可能你的文件名和类名不一致,也有可能你的这个文件中还有其他的类,这些类前面都要public造成的错误
解决方法是:把文件放到一个新建文件夹下,然后进行编译
然后就ok了
然后运行
一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。
作为一个IDE,android studio同样的可以当做普通的IDE一样调试java的代码
通过新建一个module(注意新建的是模块不是工程),选择java library
然后就可以跟普通IDE一样调试java了。点击下面来运行java文件
结果如下
package com.example.lib;//注意包与工程的区别。
//同一个工程下,多个包,本实例新建了一个包专门用于java学习,而不是android开发
//选中包名,右键,run当前的包则可以运行本文件
//注释与取消均为:“Ctrl + /”
//public class 后面跟随本java文件名
//public class后面代表定义一个类的名称,类是java当中所有源代码的基本组织单位
public class LearnJAVA { //JAVA所有的源代码都必须写在类之内
public static void main (String[] args) {//代表类的方法,代表程序执行的起点。main函数
System.out.println("Hello, JAVA!");//打印输出语句
}
}
其实就是类似于cpp中函数的定义
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
public static void NAME(){
方法体;
}
需要在同一个类里面定义不同的方法。
注意事项
对应的局部与全局的代码设计理念。
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
(大部分的语句跟cpp还是差不多的)
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
while
while( 布尔表达式 ) {
//循环内容
}
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
do {
//代码语句
}while(布尔表达式);
for循环
for(初始化; 布尔表达式; 更新) {
//代码语句
}
Java 增强 for 循环
for(声明语句 : 表达式)
{
//代码句子
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
public class Test {
public static void main(String args[]){
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
System.out.print( x );
System.out.print(",");
}
System.out.print("\n");
String [] names ={"James", "Larry", "Tom", "Lacy"};
for( String name : names ) {
System.out.print( name );
System.out.print(",");
}
}
}
其实也就是for循环的简化而已,按正常的for循环也可以
Break(跳出当前循环语句块)
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
continue 关键字(结束当前循环进入下一次循环)
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
switch case 语句有如下规则:
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。
访问控制修饰符。Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限(这个CPP也是一样的)。
default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
public : 对所有类可见。使用对象:类、接口、变量、方法
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
非访问修饰符。为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
static 修饰符
静态变量:
static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
静态方法:
static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
final 修饰符
final 变量:
final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。
final 修饰符通常和 static 修饰符一起使用来创建类常量。
abstract 修饰符
抽象类:
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
抽象类可以包含抽象方法和非抽象方法。
其他的修饰符可以参考(https://www.runoob.com/java/java-modifier-types.html)
关于运算符
三元运算符
https://www.runoob.com/java/java-tutorial.html
https://www.youtube.com/watch?v=eIrMbAQSU34
https://www.bilibili.com/video/BV1A4411K7Gx?p=7
Android是一个开源的,基于Linux的移动设备操作系统,主要使用于移动设备,如智能手机和平板电脑。Android是由谷歌及其他公司带领的开放手机联盟开发的。
Android 提供了一个统一的应用程序开发方法,这意味着开发人员只需要为 Android 进行开发,这样他们的应用程序就能够运行在不同搭载 Android 的移动设备上。
谷歌在2007年发布了第一个测试版本的 Android 软件开发工具包(SDK),第一个商业版本的 Android 1.0,则发布于2008年9月。2012年6月27日,在谷歌I/O大会上,谷歌宣布发布了 Android 版本4.1 Jelly Bean。 Jelly Bean 是一个在功能和性能方面的渐进的更新,主要目的是改进用户界面,
Android 源代码是根据自由和开放源码软件许可证。谷歌发布的大部分代码遵循 Apache 许可证2.0版,Linux 内核的变化遵循 GNU 通用公共许可证版本2。
Android编程是基于Java编程语言的,所以需要先对JAVA语言有基本的了解
Android 应用程序一般使用 Android 软件开发工具包,采用 Java 语言来开发。
Android历史各种已发布的版本名称:
Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。
在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能,比如进程管理,内存管理,设备管理(如摄像头,键盘,显示器)。同时,内核处理所有 Linux 所擅长的工作,如网络和大量的设备驱动,从而避免兼容大量外围硬件接口带来的不便。
android系统是基于linux内核的,这一层为android设备的各种硬件提供底层的驱动,如显示驱动、音频频率、照相机驱动、蓝牙驱动、蓝牙驱动、wifi驱动、电影管理。
这一层通过一些C、C++库来为android系统提供了主要的特性支持。如SQLite库提供了数据的支持,OpenGL|ES库提供了3D绘图的支持,webkit库提供了浏览器内核的支持等。
在 Linux 内核层的上面是一系列程序库的集合,包括开源的 Web 浏览器引擎 Webkit ,知名的 libc 库,用于仓库存储和应用数据共享的 SQLite 数据库,用于播放、录制音视频的库,用于网络安全的 SSL 库等。
Android程序库
这个类别包括了专门为 Android 开发的基于 Java 的程序库。这个类别程序库的示例包括应用程序框架库,如用户界面构建,图形绘制和数据库访问。一些 Android 开发者可用的 Android 核心程序库总结如下:
这是架构中的第三部分,自下而上的第二层。这个部分提供名为 Dalvik 虚拟机的关键组件,类似于 Java 虚拟机,但专门为 Android 设计和优化。
Dalvik 虚拟机使得可以在 Java 中使用 Linux 核心功能,如内存管理和多线程。Dalvik 虚拟机(5.0系统之后改为ART运行环境)使得每一个 Android 应用程序运行在自己独立的虚拟机进程。相较于java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况做了优化处理。
Android 运行时同时提供一系列核心的库来为 Android 应用程序开发者使用标准的 Java 语言来编写 Android 应用程序。
这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的。
应用框架层以 Java 类的形式为应用程序提供许多高级的服务。应用程序开发者被允许在应用中使用这些服务。
顶层中有所有的 Android 应用程序。你写的应用程序也将被安装在这层。这些应用程序包括通讯录,浏览器,游戏等。
应用程序组件是一个Android应用程序的基本构建块。这些组件由应用清单文件松耦合的组织。AndroidManifest.xml描述了应用程序的每个组件,以及他们如何交互。
以下是可以在Android应用程序中使用的四个主要组件。其中,活动是所有Android应用程序的门面,凡是在应用中看得到的东西都是放在活动中的(也即与用户交互,UI)。而服务则是在后台运行的,即使用户退出了应用,服务仍然是可以继续运行的。广播接收器允许应用接收来自各处的广播消息,比如电话、短信等。当然应用同样也可以向外发布广播消息。内容提供器泽为应用程序之间共享数据提供了可能。
组件 | 描述 |
---|---|
Activities(活动) | 描述UI,并且处理用户与机器屏幕的交互。 |
Services(服务) | 处理与应用程序关联的后台操作。 |
Broadcast Receivers(广播接收器) | 处理Android操作系统和应用程序之间的通信。 |
Content Providers(内容提供器) | 处理数据和数据库管理方面的问题。 |
一个活动标识一个具有用户界面的单一屏幕。举个例子,一个邮件应用程序可以包含一个活动用于显示新邮件列表,另一个活动用来编写邮件,再一个活动来阅读邮件。当应用程序拥有多于一个活动,其中的一个会被标记为当应用程序启动的时候显示。
一个活动是Activity类的一个子类,如下所示:
public class MainActivity extends Activity {
}
服务是运行在后台,执行长时间操作的组件。举个例子,服务可以是用户在使用不同的程序时在后台播放音乐,或者在活动中通过网络获取数据但不阻塞用户交互。
一个服务是Service类的子类,如下所示:
public class MyService extends Service {
}
广播接收器简单地响应从其他应用程序或者系统发来的广播消息。举个例子,应用程序可以发起广播来让其他应用程序知道一些数据已经被下载到设备,并且可以供他们使用。因此广播接收器会拦截这些通信并采取适当的行动。
广播接收器是BroadcastReceiver类的一个子类,每个消息以Intent对象的形式来广播。
public class MyReceiver extends BroadcastReceiver {
}
内容提供者组件通过请求从一个应用程序到另一个应用程序提供数据。这些请求由ContentResolver类的方法来处理。这些数据可以是存储在文件系统、数据库或者其他其他地方。
内容提供者是ContentProvider类的子类,并实现一套标准的API,以便其他应用程序来执行事务。
public class MyContentProvider extends ContentProvider {
}
Android系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。
android系统还自带了轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过android封装好的APII进行操作,让存储和读取数据变得非常方便。
正如前面介绍那样,android开发是基于java语言的。而JDK包含了java运行的环境、工具集合、基础类库
Android SDK是谷歌提供的Android开发工具包(前面我们安装的时候,出问题的地方就是SDK的安装)。在开发Android程序时,我们需要引入该工具包,来使用Android相关的API
这在前面已经完成的安装和配置了。
在2013年,google就推出了这款强大的IDE
https://developer.android.com/studio
https://www.runoob.com/android/android-tutorial.html
https://blog.csdn.net/qq_41976613/article/details/91432304(android studio 安装)
https://www.youtube.com/watch?v=roDz8mMvbIg&list=PLknSwrodgQ72X4sKpzf5vT8kY80HKcUSe&index=2&t=0s
https://blog.csdn.net/konggu_youlan/article/details/79942800(JDK安装教程)
https://www.runoob.com/android/android-studio-install.html(android studio 安装)
https://developer.android.com/studio/intro(android studio的用户手册)
https://blog.csdn.net/xuw_xy/article/details/89524335
https://blog.csdn.net/weixin_38234890/article/details/80010231
https://www.youtube.com/watch?v=sehxt5wbsgM&list=PLoDvOw64tSYsWvlxk9aIDOGPVrFQeHull(android开发视频)
《Android第一行代码》(推荐书籍)