一、实验目的与内容:
目的:掌握面向Android编程的开发环境搭建。学习、掌握Android程序编写基本步骤,例如,Android Studio平台编写简单的一个 HelloWorld程序,掌握编译、运行等基本步骤和操作。
内容要求:
1、 搭建开发环境(基本要求,60分):
(在自己电脑上)下载安装和配置Android Studio开发环境,并熟悉该开发环境中的常用操作,并 New -> New Project ->Base Activity一个项目,而且能运行成功。请在报告中给出搭建环境成功的截图和简要文字说明,简述自己所了解掌握的常用操作。
2、 新建的程序项目解析(提升要求,40分)
通过查阅相关资料,尝试对前面新建的Base Activity项目进行详细的解析,包括代码的结构、每一部分的功能、每行代码表示的意义等。总体要求是越完整越好,越详尽越好。
注意:
实验报告中需要有实验结果的截屏图像。
二、实验过程和代码与结果
1.开发环境的搭建 实验过程及结果
首先打开安装包
点击“Next”按钮进入下一阶段:
注意此处要全部勾选,即需要勾选上虚拟机,然后继续点击“Next”进入下一步:
此处为服务协议,需点击“I Agree”并进行下一阶段开始安装
等待一段时间后,安装完成
此处勾选“Start Android Studio”并点击“Finish”完成安装并进入“Android Studio”
安装完成后打开页面如下:
第一次进入后,选择下载虚拟机
等待安装完成之后进入“Android Studio”
进入后开发环境即搭建完成,可以顺利创建新项目。
2. 自己建立的Base Activity程序的解析过程
①建立新Project,并重名为“HelloWorld”
②在虚拟机运行模式中选择“Phone and Tablet”
③在模板中选择“Basic”
④最后输入工程名字,完成创建
⑤创建完成后点击“Finish”进入项目,并点击“RUN”按钮进行运行,即可启用虚拟机
3.相关文件作用:
(1).gradle和.idea
这两个目录下放置的都是Android Studio编译运行时自动生成的一些文件。
(2).app
项目中的代码、相关资源等内容几乎都是放置在这个目录下的,后续开发工作也基本围绕这个目录展开。
(3).build
这个目录的内容与他的名字一样主要包含了一些在编译时自动生成的文件。
(4). gradle
这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。 Android Studio默认没有启用gradle wrapper的方式,如果需要打开,可以点击Android Studio导航栏→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)Hello World.iml
iml文件是所有IntelliJ IDEA项目都会自动生成的一个文件(由于Android Studio是基于IntelliJ IDEA开发的),这个文件仅仅用于标识这是一个IntelliJ IDEA项目。
(10).local .properties
这个文件用于指定本机中的Android SDK路径,通常内容都是系统自动生成的,一般情况下不需要修改。除非你本机中的Android SDK位置发生了变化,那么就将这个文件中的路径改成新的位置即可。
(11). settings.gradle
这个文件用于指定项目中所有引入的模块。由于HelloWorld项目中就只有一个app模块,因此该文件中也就只引人了app这一个模块。通常情况下模块的设置都是自动完成的,一般不需要手动去修改。
App目录下文件:
(1)build
这个目录和外层的build目录类似,主要也是包含了一些在编译时自动生成的文件。
(2)libs
如果你的项目中使用到了第三方jar包,此时就需要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
(3)androidTest
此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
(4)java
Java目录主要用于存放我们所有Java代码的地方,展开该目录,你将看到刚创建的Hello World Activity文件就在里面。
(5)res
这个目录存放项目中使用到的所有图片、布局、字符串等资源。这个目录下还有很多子目录,图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下,这样的分配会让整个工程看起来很有条理性。
(6)AndroidManifest.xml
这里面包括整个Android项目的配置文件,用户在程序中定义的所有组件都在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。
(7)test
此处是用来编写Unit Test测试用例的,这是对项目进行自动化测试的另一种方式。
(8)gitignore
这个文件用于将app模块内的指定的目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。
(9)app.iml
IntelliJ IDEA项目自动生成的文件,同上9。
(10)build.gradle
这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。
(11)proguard-rules.pro
这个文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读。
4.运行源代码分析
首先我们可以看到,HelloWorldActivity是继承自AppCompatActivity的,这是一种向下兼容的Activity,可以将Activity在各个系统版本中增加的特性和功能最低兼容到Android 2.2系统。Activity是Android系统提供的一个活动基类,我们项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性(AppCompatActivity 是 Activity 的子类)。然后可以看到HelloWorldActivity中有一个onCreate()方法,这个方法是一个活动被创建时必定要执行的方法,其中只有两行代码,并且没有Hello World!的字样。
那么运行时显示的Hello World!是在哪里定义的呢?其实Android程序的设计讲究逻辑和视图分离,因此是不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。可以看到,在onCreate()方法的第二行调用了 setContentView()方法,就是这个方法给当前的活动引人了一个hello_world_layout布局,那Hello World!一定就是在这里定义的了!我们快打开这个文件看一看。
布局文件都是定义在res/layout目录下的,当你展开layout目录,你会看到hello_world_layout.xml这个文件。打开该文件并切换到Text视图,代码如下所示:
源代码中包含一个TextView,这是Android 系统提供的一个控件,用于在布局中显示文字的。然后可以在TextView中看到了Hello World!的字样,这说明“Hello World!”原来就是通过android:text="Hello world!"这句代码定义的。
5.常见问题
看到QQ群内有些同学有版本兼容性发生的报错问题,我通过自己电脑调试和查阅资料研究了一晚上,得到了具有广泛适用性的解决办法。
分析错误原因:
1.当你在用别的电脑上的android studio编写一个项目时,然后copy下来,又在自己电脑上的android studio 上导入该项目时会报错(两台电脑上安装的android studio版本不一样)
2.自己的android studio SDK平台工具的版本太低,然后在不了解项目构建文件(build.gradle文件)的前提下,点开了SDK Manger更新了项目构建工具(SDK Build-Tools)的版本
对应解决办法:
点开SDK Manager图标,然后点击Updates就可以看到了
这里我的 sdk 工具版本就是26.1.1了
清楚了自己的sdk 工具版本后,接下来我们继续查看版本,接下来是看sdk 构建工具(sdk Build-Tools)的版本,还是在sdk manager上操作,这次选中 Android SDK后,再在右边选中SDK Tools(只看打勾选项就行)
此处必须满足Android SDK Build-Tools (就是我前面一直提到的sdk 构建工具)版本是与SDK Tools版本相匹配,否则会发生错误或导致报错。
点开项目构建文件Gradle Scripts,再继续点击build.gradle(Module:app)ps:有两个名字相同的,选第二个,看下面代码的注释行就可以了。
apply plugin: 'com.android.application' android { compileSdkVersion 27 // 使用版本27的SDK编译 buildToolsVersion "27.0.0" // 构建工具版本号为27.0.0 对应上图的SDK Build-tools27 defaultConfig { applicationId "com.example.haha.myapplication" minSdkVersion 19 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.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.+' //上面一行是远程依赖声明,这里我们着重来看appcompat-v7:27+ testCompile 'junit:junit:4.12' }
我们来分析下appcompat-v7:27.+
上面我们查到我们的sdk工具版本是26,这里的远程依赖包的版本是27,那么我们只需要将把版本减低到和sdk工具版本相同就可以解决啦!
apply plugin: 'com.android.application' android { compileSdkVersion 26 //修改 buildToolsVersion "27.0.0" defaultConfig { applicationId "com.example.haha.myapplication" minSdkVersion 19 targetSdkVersion 26 //修改 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.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:26+' //修改 testCompile 'junit:junit:4.12' }
修改完以上内容后,点击 SYNC进行同步即可解决问题。
完成这一些的修改后问题解决,因为当你创建一个新的项目时,有gradle去帮你完成构建项目工作,那它自然是按你的最高sdk构建工具版本去构建项目,所以就会出现这样的问题。
三、实验总结
(此处写你的过程,比如遇到的错误,以及解决方法,你的所想、所得)
通过本实验的学习。我成功的搭建了Android的开发环境,为以后Android项目的运行打下了基础。此外我也建立了自己的第一个Android Hello World项目,顺利的在Android模拟器上显示出了“Hello World”。此外由于Android的大部分操作是基于Java完成的,需要对Java语言有一定的基础,通过业余时间自学了Java对Android的编写起到了促进作用。
此外,由于Android与Java的不同,在Android的编写中,务必要熟悉每个文件的作用,这在本实验报告中有详细的体现。
我也通过QQ群,发现了其他同学在搭建开发环境中所存在的问题,通过联系该同学,并进行上网查阅资料,帮助该同学解决问题的同时也加深了自己对Android开发平台的了解和认识。