原文链接 上手第一个Android应用 ,欢迎骚扰本站
近年来,随着智能手机的大众化,移动端开发成为了热门岗位,开发人员开发出各式App共我们日常使用,我们自己也可以来写出自己的Android应用,那么接下来就开始吧
Android应用是使用Java应用来开发的,要进行Android应用开发需要掌握Java的基本用法,掌握Java的基本语法以及特性。(Google在2019年5月宣布了Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言,你要是会Kotlin编程语言,你也可以用kotlin进行Android应用开发,这里还是使用Java来进行开发,后期再使用Kotlin开发)
文章目录
搭建开发环境
工欲善其事必先利其器,用记事本开发一个应用程序不是一个明智之举,我们需要搭建Android开发环境来进行Android应用开发。
要搭建Android开发环境,我们需要一下几个工具:
- JDK:JDK是Java语言的开发工具包,包含Java程序的运行环境,开发工具,基础类库等等,因为Android应用程序用Java进行开发,所以需要安装JDK,而且开发Android的IDE是基于IDEA开发出来的,所以需要JDK提供运行IDE的运行环境。(使用JDK1.8及以上版本)
- Android SDK:跟JDK很类似,是Android应用的开发工具包,通过它来调用Android相关的API。
- Android Studio:谷歌官方的Android IDE,接下来我们需要使用Android Studio来开发所有的Android程序。
安装JDK
下载及安装
由于Oracle不再免费提供JDK(但个人使用好像到2020年才收费,但没有收费准则),所以这里不再使用Oracle官方的JDK,而是使用开源版本的JDK–>OpenJDK,这里推荐亚马逊的Corretto(这是少数可以在windows环境下使用的JDK,本想用阿里的Dragonwell,奈何Dragonwell目前只能在Linux环境下使用),官方网址:corretto
如下图所示
点击 下载 Amazon Corretto 8,进入下载选择页面,根据自己的电脑系统来选择合适的下载版本
这里选择下载 Windows x64(64位的OpenJDK)的amazon-corretto-8.222.10.3-windows-x64-jdk.zip压缩文件。
下载好之后,将它解压到你想放的文件夹下(文件夹路径上不能有中文),记住corretto放置的路径
配置环境变量
然后要配置一下环境变量才能使用JDK。
右击此电脑选择属性,出现如下界面
点击“高级系统设置”,然后点击“环境变量”,在系统变量这点击新建,新建一个名字为“JAVA_HOME”的变量,变量值为corretto放置的路径,点击确定。
然后需要将corretto添加到系统的Path中,点击Path这个系统变量,然后点击编辑,所有变量值在前面添加下面一句
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
然后确定,这样就将corretto添加到系统的Path中。
最后在新建一个CLASSPATH变量如下图所示
变量值为
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
这样corretto的环境变量就配置好了
测试corretto安装是否成功
键盘按下 win + R 打开“运行”
输入cmd,打开windows终端,在终端中输入 java、javac、java -version来验证是否JDK是否安装成功,如果显示以下信息,则表示安装成功,那我们可以进入下一步了。
安装Android Studio
Android Studio集成了Android SDK,所以我们不用额外下载Android SDK,Google官方下载地址:Android Studio
下载后是一个安装包,双击进行安装,一直点击next就好,其中选择安装组件时建议全部勾上,如下图所示
接下来还会让你选择Android Studio的安装地址以及Android SDK的安装地址,这些根据你自己电脑的实际情况选择就行了,不想改动的话就保持默认设置
剩下的全部保持默认项,一直点击Next即可完成安装
安装完成后,点击Finish按钮来启动Android Studio,一开始会让你选择是否导入之前Android Studio版本的配置,由于这是我们首次安装,这里选择不导入就可以了
点击OK按钮会进入到Android Studio的配置界面
然后点击Next开始进行具体的配置
这里我们可以选择Android Studio的安装类型,有Standard和Custom两种。Standard表示一切都使用默认的配置,比较方便;Custom则可以根据用户的特殊需求进行自定义。简单起见,这里我们就选择Standard类型了,继续点击Next完成配置工作
现在点击Finish按钮,配置工作就全部完成了。然后Android Studio会尝试联网下载一些更新,等待更新完成后再点击Finish按钮就会进入Android Studio的欢迎界面
这样,Android开发环境已经搭建完成了,接下来就可以开始快乐的写代码了(快乐是不可能快乐的)
创建一个Android项目
在Android Studio的欢迎界面点击Start a new Android Studio project,会打开一个创建新项目的界面。如下图所示
Android Studio提供了很多种内置模板,才刚刚开始学习,用不着这么多复杂的模板,这里直接选择Empty Activity来创建一个空的活动就可以了,点击next,会看到如下界面
Name表示应用名称,此应用安装到手机之后会在手机上显示该名称,这里我们填入FirstApplication。Package name表示项目的包名,Android系统就是通过包名来区分不同应用程序的,因此包名一定要具有唯一性。Android Studio会根据应用名称和公司域名来自动帮我们生成合适的包名,如果你不想使用默认生成的包名,也可以自行修改(直接使用默认的,懒得改名称了)。Save location表示项目代码存放的位置,如果没有特殊要求的话,这里也保持默认就可以了(我这里选择了其他位置)。由于Google宣布Kotlin是Android应用首选编程语言,我们在这需要将Language改成Java,这样就可以使用Java进行开发了。
Android 4.0以上的系统已经占据了超过98%的Android市场份额,因此这里将Minimum SDK指定成API 19就可以了。
最后点击Finish完成创建,等待一会,Android Studio就创建好了项目,项目截图如下:
部署应用
因为Android Studio自动为我们生成了很多东西,现在不需要编写任何代码,FirstApplication项目就已经可以运行了。
在此之前还必须要有一个运行的载体,可以是一部Android手机,也可以是Android模拟器。这里使用Android模拟器进行测试,Android Studio自带了Android模拟器,但是我更推荐使用功能更多,性能更加强大的Genymotion模拟器来运行Android项目(Genymotion是开发者最喜欢的Android模拟器)。
那我们需要额外安装Genymotion模拟器。
安装Genymotion模拟器
去Genymotion官网下载,首先点击右上角的Sign in进行登录操作。没有账户则自行创建一个
创建好账户之后登录,登录之后,输入网址https://www.genymotion.com/download/ ,进入下载选择页面
因为Genymotion运行需要VirtualBox,如果电脑中没安装过,建议选第一个版本。
双击下载好的安装包,开始安装,安装也是傻瓜式的,一路next就好,在安装过程中会自动进行安装VirtualBox的操作界面,这里也是一路next就好,安装好之后就打开Genymotion,打开后出现这个界面
这里需要联网登录,使用下载时创建的账号就行,然后next,在下个界面选择Persional Use,然后next,
这里打勾之后,点击next就可以使用Genymotion了。
打开Genymotion以后,界面如下:
由于我已经安装了虚拟机,所以Genymotion显示出来了,如果要安装虚拟机则在列表中选择,然后点击后面的按钮安装(推荐使用Google Nexus 7),然后这样虚拟机就创建完成了。最后点击Genymotion->Settings->ADB,不使用Genymotion自带的Android SDK Tools,使用Android Studio安装的Android SDK,将路径指向Android SDK的安装路径。
这样Genymotion就设置好了。
安装Genymotion插件
Genymotion安装好了,Android Studio需要安装Genymotion插件才能识别并使用Genymotion的虚拟机,安装插件的步骤如下:
在Android Studio中,点击File->Settings->Plugins,在搜索栏中输入Genymotion,然后点击安装,安装好之后重启Android Studio。
重启之后点击View->Toolbar,更换工具栏
然后点击最后一个图标,这个就是Genymotion虚拟机
然后出现列表,点击start启动虚拟机
启动之后的虚拟机就像这样
最后,将Android应用程序部署到虚拟机上,如下图所示
点击箭头指向的栏,选择要部署的虚拟机,然后点击旁边的运行按钮,就直接安装部署到虚拟机上了,程序运行结果如下图
这样我们第一个Android应用程序就开发完成了。
Android项目的结构
基于第一个Android应用程序,来分析一下Android项目的目录结构。
首先创建项目时的目录结构如上,这并不是项目真实的目录结构,而是被Android Studio转换过的。需要切换项目结构模式,如下图所示
项目整体结构
- .gradle和**.idea**(项目中已隐藏)
Android Studio自动生成的一些文件,无需做任何操作 - app
存放项目中的代码、资源等内容 - build
存放编译时自动生成的文件
4.gradle
存放gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle - .gitignore
将指定的目录或文件排除在版本控制之外 - build.gradle
项目全局的gradle构建脚本 - gradle.properties
全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本
8.gradlew和gradlew.bat
用来在命令行界面中执行gradle命令的,gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的
9.FirstApplication.iml
iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(Android Studio是基于IntelliJIDEA开发的),用于标识这是一个IntelliJ IDEA项目 - local.properties
用于指定本机中的Android SDK路径 - settings.gradle
用于指定项目中所有引入的模块
app目录下的结构
- build
包含了一些在编译时自动生成的文件 - libs
使用到了第三方jar包,需要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去 - androidTest
编写Android Test测试用例,可以对项目进行一些自动化测试 - java
放置所有Java代码的地方 - res
存放项目中使用到的所有图片、布局、字符串等资源 - AndroidManifest.xml
整个Android项目的配置文件,程序中定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明 - test
编写Unit Test测试用例,是对项目进行自动化测试的另一种方式 - .gitignore
将指定的目录或文件排除在版本控制之外 - app.iml
IntelliJ IDEA项目自动生成的一个文件 - build.gradle
app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置 - proguard-rules.pro
用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读
res目录下的结构
- drawable 开头的文件夹
用来放置图片,设置多个drawable开头的文件夹,主要是为了让程序能够更好地兼容各种设备 - mipmap 开头的文件夹
放置应用图标,设置多个mipmap开头的文件夹,主要是为了让程序能够更好地兼容各种设备 - values 开头的文件夹
存放字符串、样式、颜色等配置
要引用res文件夹下的资源,有两种引用方式:
- 在代码中引用:通过“R.文件路径(res目录下的路径).文件名”的格式获取资源的引用,如果是引用values文件夹下的资源,则改成“R.文件名.引用子项”的格式
- 在XML文件中引用:通过“@文件夹/文件名”的格式引用资源,如果是引用values文件夹下的资源,则改成“@文件名/引用子项”的格式
build.gradle
Android Studio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(如Ant和Maven)的各种烦琐配置。
项目目录下的build.gradle文件内容如下:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
- 两处repositories的闭包中都声明了jcenter(),jcenter是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,可以在项目中引用任何jcenter上的开源项目
- dependencies闭包中使用classpath声明了一个Gradle插件,通过这个插件来构建Android项目(Gradle能构建多种项目,需要声明构建的是哪种项目)
app目录下的build.gradle文件内容如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion '29.0.0'
defaultConfig {
applicationId "com.example.firstapplication"
minSdkVersion 19
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'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
- apply plugin:应用插件,有两个可选值:“com.android.application”(表示这是一个应用程序模块)和"com.android.library"(表示这是一个库模块)
- android:这是一个闭包,在这个闭包中配置项目构建的各种属性。
- compileSdkVersion:指定项目的编译版本
- buildToolsVersion:指定项目构建工具的版本
- defaultConfig:defaultConfig闭包中可以对项目的更多细节进行配置
- applicationId:指定项目的包名
- minSdkVersion:指定项目最低兼容的Android系统版本
- targetSdkVersion:指定的值表示在该目标版本上已经做过了充分的测试,系统将会为应用程序启用一些最新的功能和特性
- versionCode:指定项目的版本号
- versionName:指定项目的版本名
- buildTypes:buildTypes闭包用于指定生成安装文件的相关配置通常只会有两个子闭包,一个是debug,一个是release。debug闭包用于指定生成测试版安装文件的配置,release闭包用于指定生成正式版安装文件的配置。debug闭包是可以忽略不写的。
- minifyEnabled:指定是否对项目的代码进行混淆,true表示混淆,false 表示不混淆
- proguardFiles:指定混淆时使用的规则文件
- dependencies:指定当前项目所有的依赖关系
Android日志工具
Java新手都非常喜欢使用System.out.println() 方法来打印日志。不过在真正的项目开发中,是极度不建议使用System.out.println() 方法。
System.out.println() 方法除了方便便没有其他优点了,它的缺点很明显:日志打印不可控制、打印时间无法确定、不能添加过滤器、日志没有级别区分等等。
为解决这些问题Android提供了Log类来打印日志信息(当然并不是完美解决,不过已经做的很好了)。
Log类提供了如下几个方法:
- Log.v()。用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种。
- Log.d()。用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。
- Log.i()。用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户行为数据。对应级别info,比debug高一级。
- Log.w()。用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。
- Log.e() 。用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级。
利用这些方法就可以方便我们进行Android应用开发了。