一、了解安卓
-
(一) Android系统架构
- Linux内核层
为Android设备的各种硬件提供了底层的驱动,如显示、音频、照相机、蓝牙等,关于Linux的内核版本在手机设置里面关于手机内可以看到 - 系统运行库层
通过一些c/c++库为Android系统提供了主要的特性支持,Android运行时库主要提供了一些核心库,允许开发者使用Java语言来编写Android应用 - 应用框架层
提供构建应用程序时可能用到的各种API - 应用层
显示应用程序 - Dalvik与ART
Dalvik包含了一整套的Android运行环境虚拟机,每个App都会分配Dalvik虚拟机来保证互相之间不受干扰并保持独立,其特点是在运行时编译;ART与Dalvik类似,区别在于是安装时就进行编译
- Linux内核层
-
(二) Android版本
一般在使用时提供 5.0 以上的版本 -
(三)Android应用开发特色
- Android所提供的开发工具
-
1、 四大组件
- 活动:所用Android应用程序的门面
- 服务:一直在后台运行
- 广播接收器:允许你的应用接受和发送来自各处的广播,比如电话、短信等
- 内容提供器:为应用程序之间共享数据提供了可能
-
2、丰富的系统控件:为开发者提供了界面
-
3、SQLite数据库
-
4、多媒体
-
5、地理位置定位
-
- Android所提供的开发工具
二、 分析Android项目
- 项目中资源的分析
- Project主项目下:
- 1、.gradle 和 .idea文件 :无须关心
- 2、app文件:项目中的代码、资源等内容几乎都是放置在这个目录下的
- 3、build文件:无需关心
- 4、gradle文件:包含了gradle wrapper的配置文件,若要启用gradle wrapper的方式,File->Settings->Build,Execution,Deployment->Gradle
- .5、.gitignore:将指定的目录或文件排除在版本控制之外
- 6、build.gradle:项目全局的gradle构建脚本,无需更改
- 7、gradle.properties:全局的gradle配置文件,这里配置的属性将会影响到项目中所有的gradle编译脚本
- 8、gradlew和gradlew.bat:用来在命令行界面中执行gradle命令的。其中gradlew在Linux和Mac系统中使用
gradlew.bat是在Windows系统中使用 - 9、HelloWorld.iml:用于标识此项目是一个IntelliJ IDEA项目
- 10、local.properties:指定本机中的Android SDK路径
- 11、settings.gradle:制定项目中所有引用的模块
- app文件下
- 1、build:无需关心
- 2、libs:如果你的项目中使用了第三方的jar包,就要把这些包放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去
- app.src包下
- 3、androidTest:编写Android测试用例的,对项目进行自动化测试的一种方式
- src.main包下
- 4、java:存放Java代码之处
- 5、res:项目中的所有图片、布局、字符换、串等资源都要存放到这个目录下,
①图片放在drawable目录下②布局放在layout目录下③字符串放在values目录下 - 6、AndroidManifest.xml:程序中定义的所有的四大组件都要在这个文件底下进行注册,还可以在这个文件中给应用程序添加权限声明
- 7、test:编写Unit Test测试用例的,对项目进行自动化测试的另一种方式
- 8、gitignore:将app模板内的指定的目录或文件排除在版本控制之外
- 9、app.iml:无需关心
- 10、build.gradle:app模板的gradle构建脚本,在该文件中会指定很多项目构建的相关的配置
- 11、proguard-rules.pro:用于指定项目代码的混淆规则
- Project主项目下:
三、 详解某些重要的资源
(一)
在AndroidManifest.xml文件下,活动的注册:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> //主活动设置
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
.MainActivity是这个活动(项目)的名称,
intent-filter中的语句表示MainActivity是整个Project项目的"主活动"
MainActivity的活动代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
onCreate()方法是一个活动被创建时必定要执行的代码,其中调用setContentView()方法,就是此方法给当前的活动引入了一个activity_main的布局,在布局文件中编写APP的界面
AppCompatActivity类是一个向下兼容的Activity,可以将Activity在各个系统中增加的特性和功能最低兼容到Android2.1系统。AppCompatActivity类继承自Activity这一活动基类,项目中所有的活动类都必须继承它或者它的子类才能拥有活动的特性
(二) res目录中的资源
- drawable类文件:存放图片
- mipmap类文件:存放应用图标
- values类文件:存放字符串、样式、颜色等
- layout类文件:存放布局文件
- 举例:在res/values/strings.xml文件下的应用程序名的字符串,
<resources>
<string name="app_name">Hello World</string> //一个应用程序名的字符串
</resources>
通过两种方式来引用它:
①在代码中,通过R.string.app_name来引用
② 在XML中,通过@string/app_name
其中的string是可以替换的,若是引用图片资源,可换成drawable;若是引用应用图标,可换成mipmap;若是引用布局文件,可换成layout
例如,打开AndroidManifest.xml文件
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher" //指定项目的应用图标
android:label="@string/app_name" //制定项目的应用名称
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
........
</application>
(三)build.gradle文件
- 1)最外层目录下的build.gradle文件
buildscript {
repositories {
google()
jcenter() //代码托管仓库,很多Android项目都会选择将代码托管到jcenter上
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1' //该关键字声明了一个Gradle插件
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
通常情况下不需要修改此文件中的内容,除非是想添加一些全局的项目构建配置
- 2)app目录下的build.gradle文件
apply plugin: 'com.android.application'
//第一行应用了一个插件 在末端若为application,表示这是一个应用程序模块;若为library,表示这是一个库模块。
//二者的区别:前者可以直接运行;后者只能作为代码库依附于别的应用程序模块来运行
android {
compileSdkVersion 29 //指定项目的编译版本
buildToolsVersion "29.0.3" //指定项目构建工具的版本
defaultConfig { //(本包可以对项目的更多细节进行配置)
applicationId "com.example.helloworld1" //指定项目的包名
minSdkVersion 23 //指定项目最低兼容的Android版本
targetSdkVersion 29
versionCode 1 //指定项目的版本号
versionName "1.0" //指定项目的版本名
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes { //在buildTypes包下:(本包用于指定生成安装文件的相关配置)···本包下通常会有两个子闭包:
//······debug闭包:指定生成测试版安装文件的配置;······release闭包:指定生成正式版安装文件的配置
release {
minifyEnabled false //用于指定是否对项目的代码进行混淆,true表示混淆,false表示不混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //用于指定混淆时使用的规则文件
}
}
}
dependencies { //在dependencies闭包下:(本包可以指定当前项目所有的依赖关系,包括:本地依赖、库依赖、远程依赖)
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
四、日志工具的使用
- Log.v(“Tag”,“msg”):打印最为琐碎的、意义最小的日志信息,对应级别:verbose
- Log.d(“Tag”,“msg”):打印一些调试信息,对应级别:debug
- Log.i(“Tag”,“msg”):打印一些比较重要的数据,对应级别:info
- Log.w(“Tag”,“msg”):打印警告信息,对应级别:warn
- Log.e(“Tag”,“msg”):打印程序中的错误信息,对应级别:error(其中Tag是指定的活动名的字符串变量名)
- 上述日志的等级逐级增高
- 快捷键:输入logd再摁下tab键
使用方法,例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("MainActivity","hello");
}
其中括号内第一个参数tag一般传入当前的类名 ;第二个参数msg为想要打印的内容
结果如下所示:
五、补充
1、API(Application Programming Interface,应用程序接口):一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。 [1] 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
2、JDK:Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
3、Android SDK:Android软件开发工具包
4、jar文件:在软件领域,JAR文件(Java归档,英语:Java Archive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。、
5、Gradle插件:Gradle插件的简介和使用