《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁

🦄 个人主页——libin9iOak的博客🎐
🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥



《移动互联网技术》课程简介

《移动互联网技术》课程是软件工程、电子信息等专业的专业课,主要介绍移动互联网系统及应用开发技术。课程内容主要包括移动互联网概述、无线网络技术、无线定位技术、Android应用开发和移动应用项目实践等五个部分。移动互联网概述主要介绍移动互联网的概况和发展,以及移动计算的特点。无线网络技术部分主要介绍移动通信网络(包括2G/3G/4G/5G技术)、无线传感器网络、Ad hoc网络、各种移动通信协议,以及移动IP技术。无线定位技术部分主要介绍无线定位的基本原理、定位方法、定位业务、数据采集等相关技术。Android应用开发部分主要介绍移动应用的开发环境、应用开发框架和各种功能组件以及常用的开发工具。移动应用项目实践部分主要介绍移动应用开发过程、移动应用客户端开发、以及应用开发实例。

课程的教学培养目标如下:

1.培养学生综合运用多门课程知识以解决工程领域问题的能力,能够理解各种移动通信方法,完成移动定位算法的设计。

2.培养学生移动应用编程能力,能够编写Andorid应用的主要功能模块,并掌握移动应用的开发流程。

3. 培养工程实践能力和创新能力。

 通过本课程的学习应达到以下目的:

1.掌握移动互联网的基本概念和原理;

2.掌握移动应用系统的设计原则;

3.掌握Android应用软件的基本编程方法;

4.能正确使用常用的移动应用开发工具和测试工具。

第四章 移动应用开发

本章小结:

1**、本单元学习目的**

掌握Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序。

2**、本单元学习要求**

(1) 掌握移动应用开发框架的结构;

(2) 熟练使用Android应用的开发工具。

3**、本单元学习方法**

结合教材以及Android Studio开发环境,在电脑上进行操作,熟悉教材中介绍的每一个步骤。

4**、本单元重点难点分析**

重点

(1)Android****应用工程的建立

创建第一个Android应用项目,首先设定项目的命名规范。将开发项目划分为个人项目和公司项目两类。个人项目又分为由个人完成和由团队完成两种。项目名称的第一个前缀用来区分个人还是团队,然后依次是团队和个人名称以及模块名称。接下来遵循项目命名规范,构建第一个移动应用工程项目。

打开Android Studio,选择文件(File)菜单的新建项目(New Project),然后输入应用的名称、公司的域名或个人的名称,以及项目存放的位置,如下图所示。单击“下一步(Next)”按钮,进入下一个设置窗口。

在窗口的“minimum SDK”选项中,选择应用支持的最低SDK版本,如下图所示。随后,一步步按照提示操作,创建自己的工程项目。

(2) Android Studio的环境配置和使用方法

接下来,需要设置移动应用开发所使用Android版本,也就是配置对应的SDK版本。点击文件File菜单下的Settings子菜单,打开配置窗口,搜索“SDK”,设置Android SDK在本地的存储路径,如下图所示;同时也可以选取使用特定的Andriod版本。

最后,需要配置调试和运行Android应用程序的模拟器(如果采用真机调试则不需要)。首先,选择工具(Tools)菜单下的Android子菜单,点击AVD Manager选项;然后,点击创建模拟器按钮(Create Virtual Device),打开创建窗口,选择Phone(也可以创建其他类型的移动设备,比如:可穿戴设备、平板等)创建手机模拟器。创建窗口中列出了各种类型的手机,选择一个类型,点击Next按钮,完成配置,如下图所示。

模拟器创建好以后,点击启动按钮,即可启动模拟器,如下图所示。

如果不采用Android Studio提供的模拟器,也可以使用第三方模拟器。通常有两种类型的模拟器:一类基于Bluestacks,另一类基于VirtualBox。Bluestacks把Android底层的API接口翻译成Windows API,它对计算机的硬件本身没有要求,在硬件兼容性方面有一定的优势。Virtualbox是Oracle旗下的开源项目,它在Windows内核中直接插入驱动模块,创建一个完整的虚拟电脑环境运行安卓系统。第三方模拟器Genymotion就是基于VirtualBox,它的个人版是免费的。

难点

(1)移动应用开发框架

工程创建好以后,在Android Studio的左边窗口显示了整个工程项目的各种信息,如下图所示。在manifests文件夹下面,可以看到应用的全局配置文件“AndroidManifest.xml”文件。这个文件负责整个应用各个组件的配置。Java文件夹下面是项目的各个包目录。选取以项目名称命名的包(pers.cnzdy.tutorial),点击展开,可以看到Android Studio自动生成的MainActivity文件。另外,在开发过程中还经常要用到资源文件夹,也就是res目录,它主要用来存放应用的各种资源。

配置文件AndoridManifest会告诉Android系统,应用程序(APP)的各种配置信息,比如程序的运行环境、所需要的权限以及Andriod的各种组件(活动、服务,广播,内容提供商等等)。打开配置文件,首先看到应用程序的配置信息,包括应用的图标(icon),应用的名称(label),以及主题样式(theme)等等,如下图所示。

应用标签()的下面是程序的界面——Activity(称为活动)。它是移动应用最重要的部分,是程序的四大组件之一。

工程项目中还有一个文件非常重要,它就是存放资源编码的R文件,如下图所示。通过R文件,在程序中可以引用各种资源,比如:字符串、图标、样式等等。每一个资源在R文件中都有唯一的编码(id号)。在程序中要引用资源的时候,都是通过这个id号进行访问。R文件不需要手工构造,它由Android Studio自动生成。

R文件中对应的资源都存放在res目录中,不同的资源又存放在不同的文件夹下面,例如:图片存放在drawable目录下面,布局存放在layout目录下面等等。这些文件夹的名称都是Andriod规定好的。

项目代码生成好以后,需要将源代码打包成可执行的形式,对于Android应用来说就是生成apk,然后安装到移动设备上运行。完成这一系列任务需要一个专门的工具,这通常由构建工具来处理。

构建工具是一个把源代码生成为可执行应用程序的过程自动化程序,其中包括编译、连接、代码打包、生成可执行文件等步骤。在Android Studio中,使用Gradle来构建项目。Gradle是一个开源的自动化构建工具,它不仅限于构建 Android 应用程序,还可用于其他应用程序的构建,比如用于Java或C++等多种项目。在Android Studio的项目窗口(project)中,可以看到一个名为build.gradle的文件。Android项目有两个gradle文件:一个是整个工程项目的gradle文件,另一个是模块的gradle文件,两个gradle文件分别存放在不同的文件夹下面。

首先打开项目构建文件可以看到,文件中主要包括两个部分:(1)应用的远程代码仓库,指定为jcenter;(2)工程项目的依赖库(dependencies)。项目构建文件如下图所示。

buil.gradle文件中,两个地方的repositories闭包都声明了jcenter。jcenter是一个代码托管仓库,很多Android开源项目都会将代码托管到jcenter上。Android应用可以通过访问远程代码仓库jcenter来获取各种插件,比如:在依赖项dependencies闭包中使用classpath声明一个Gradle插件:“com. Android.tools.build:gradle:2.3.3”(最后面的数字部分是插件的版本号),即可在依赖库中加入gradle插件,并在项目中使用,非常方便。

在一个Android项目中还可以包含多个模块,每个模块都有一个gradle文件,它存放在模块的文件夹下面,如下图所示。模块gradle文件包含的基本信息有:各种版本信息、自定义构建类型(BuildType)和依赖项。首先看到模块使用的 SDK 版本,比如:这里的24就代表支持 Andriod 7.0,最低的 SDK 版本:23 表示最低支持 Android 6.0。

在Gradle脚本里有一项是buildTypes。它默认包含debug和release这两种构建类型,并且还可以在其中设定应用是否需要混淆代码,以防止反编译。buildTypes的下面是依赖声明,可以声明本地依赖或者远程依赖。远程依赖的格式是先给出域名,比如:com.Android.support,然后是冒号,随后是组名appcompat-v7(appcompat_v7是Android的向下兼容包),其中24.2.1是版本号。Gradle在构建项目时会首先检查本地是否已经有这个库的缓存,如果没有就会自动联网下载,然后将它添加到项目的构建路径中。

日志工具主要用来显示程序运行中的各种信息,比如运行中某个变量的取值。通过查看这些信息可以了解程序的运行状态,便于发现问题和调试程序。在Java语言中,一种最简单的日志显示方式是采用System.out.println函数来输出各种信息。而在Android开发中,一般不使用这个方法,主要是因为println函数输出的日志信息不可控制,输出的时间无法确定,并且不能对各种不同的信息进行过滤,而且信息也没有按照程序问题的严重程度划分不同的级别。Android提供的替代方案是使用日志类Log(Android.util.Log)。

在Android Studio菜单View中选择Tool Windows选取显示Logcat窗口。在Logcat窗口中可以看到各种日志信息。

日志信息的级别由低到高,一共有五种类型的日志信息,分别是verbose、debug、info、warn和error。Log.v()函数用于打印最为琐碎、意义最小的日志信息。Log.d()函数用于打印调试信息,这些信息对调试程序和分析问题有帮助。Log.i()函数打印一些比较重要的数据,这些数据帮助开发人员分析用户行为。Log.w()函数打印警告信息,提示程序可能存在的潜在风险。这些出现警告的地方开发人员需要认真检查并加以修改。Log.e()函数用于打印程序中的错误信息,例如:程序中出现了异常。错误信息通常表明程序存在比较严重的问题,需要修复才能正常运行。Log函数有两个参数,第一个参数用来过滤掉那些不想查看的信息,第二个参数是显示在Logcat窗口上的信息。过滤器设置完成以后,运行程序,可以看到过滤后的信息,也可以在Logcat窗口中选取要查看日志的级别,这样能够对信息进行分类过滤。

除了通过日志工具查看各种信息以外,在Android中,还提供了另外一种运行时查看信息的方式——Toast。在程序中通过编写Toast代码,可以在Android应用的运行界面上弹出一个提示窗来显示信息。提示信息通常只显示一段时间,然后消失,它不会影响程序的运行。使用Toast时,首先通过调用Toast类的makeText()函数创建一个Toast对象,然后调用show()函数将信息显示在界面上。makeText函数有三个参数,第一个参数是提示信息显示的上下文环境(Context),例如:FirstActivity界面,由于活动本身就是一个Context对象,因此直接传入 FirstActivity.this;第二个参数是要显示的文本信息;最后一个参数有两个选项,一个是Length_short,另一个是Length_long,分别表示显示时间的长短。

(2)移动应用程序的权限管理

当Android应用要完成某种敏感的操作,比如:拨打电话、发送短信、使用摄像头等等,都需要向用户申请权限,这就确保了系统的安全。在早期的Android系统中,如果应用程序要使用某项需要权限的功能,就需要在全局配置文件(AndroidManifest)中进行设置,比如:要获取网络状态信息,需要在配置文件中进行声明:

在全局配置文件中申请权限,称为静态权限申请。采用静态权限的管理方式,在使用过程中会存在一些问题:如果通过全局配置文件请求权限,用户在安装应用的时候,就必须同意各种权限申请;如果用户不同意,应用就无法安装。这就使得很多应用程序在安装时就向用户请求过多的权限,而有的权限可能是应用程序完全不需要的。这样就会强迫用户在安装时必须同意对权限的请求。

针对这一问题,Google在Android 6.0以后加入了动态权限管理——运行时权限。对于一些敏感权限,在用户使用时进行动态申请。用户可以拒绝这些权限的申请,虽然不使用敏感性的操作,但同时又不影响其他功能的使用;而对于已经授予过的权限,用户也可以在系统设置中关闭授权。通过这种方式可以防止一些应用恶意访问用户数据,提高了系统的安全性。

Android 6.0将移动应用的所有权限分为两类:一类是普通权限,一类是危险权限。普通权限通常不会直接威胁到用户的安全和隐私。这类权限只需要通过静态注册的方式提出申请,用户在安装应用的时候进行确认;确认后,系统会对应用授权,以满足程序的运行需求。危险权限是那些可能会涉及用户隐私,或者对移动设备造成安全隐患的权限,比如:获取手机上联系人电话、定位手机的地理位置等等。这部分权限不能用静态方式注册,必须编写代码,在程序运行的时候,弹出权限请求窗口,然后由用户选择是否授权。如果用户不同意,程序就无法使用相应的功能。

危险权限一共有9组,共24个权限,分别是日历、摄像头、联系人、地理位置、麦克风、电话、传感器、短信以及存储,如下表所示。每个危险权限都属于一个权限组,比如存储权限组就包括读和写两个权限。在编写权限申请代码的时候,开发人员根据权限名申请授权。如果程序在运行过程中需要该权限,就弹出窗口,提示用户授权。如果用户同意,那么这个权限所在权限组中的所有其他权限也会被同时授权。

Permission Group(权限分组) Permissions(权限)
CALENDAR(日历) READ_CALENDAR WRITE_CALENDAR
CAMERA(摄像头) CAMERA
CONTACTS(联系人) READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS
LOCATION(地理位置) ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION
MICROPHONE(麦克风) RECORD_AUDIO
PHONE(电话) READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS
SENSORS(传感器) BODY_SENSORS
SMS(短信) SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS
STORAGE(存储) READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE

每当需要申请一个权限时,可以先查询这张表格。如果是属于这张表中的权限,那么就需要编写代码,在运行时申请权限;如果申请权限不在这张表中,那么只需要在AndroidManifest.xml文件中添加权限声明就可以了。

下面以拨打电话权限(危险权限)为例,来编写权限申请代码。首先,应用程序在每次需要“拨打电话”时,都要判断应用目前是否有该项权限。在程序中通过调用ContextCompat.checkSelfPermission()函数进行判断,如果返回PackageManager.PERMISSION_GRANTED,表示已经授权;如果没有授权则需要调用 requestPermissions() 函数来请求授权。这时系统会弹出一个权限申请对话框,用户可以选择同意或拒绝权限申请。不论是哪种结果,最终都会回调onRequestPermissionsResult()函数返回授权结果。其中requestCode表示申请的编号,用来判断当前申请的是哪一个权限,授权的结果则会封装在grantResults参数当中。

在onRequestPermissionsResult()函数中,将根据用户的授权结果进行判断:如果用户同意,就调用call()函数来拨打电话;如果用户拒绝,只能放弃操作,并且弹出一条失败提示。示例代码如下:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, 
int[] grantResults)  { 
if (requestCode == 1) { 
       if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
           calling();
       } else { 
         Toast.makeText(this, "权限被拒绝", Toast.LENGTH_SHORT).show();
}
}
}

本章习题:

1、本单元考核点

Android Studio开发软件工程的建立。

Android工程项目的各个目录和文件,构建工具Gradle。

Android的权限管理。

2、本单元课后习题

1、简述R.java和AndroidManefiest.xml文件的用途。

答案:R.java文件是ADT自动生成的文件,包含对drawable、layout和values目录内的资源的引用指针,Android程序能够直接通过R类引用目录中的资源。AndroidManifest.xml是XML格式的Android程序声明文件,包含了Android系统运行Android程序前所必须掌握的重要信息,这些信息包括应用程序名称、图标、包名称、模块组成、授权和SDK最低版本等,而且每个Android程序必须在根目录下包含一个AndroidManifest.xml文件。

2、简述Android系统的四种基本组件Activity、Service、BroadcaseReceiver和ContentProvider的用途。

答案:Activity是Android程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件,用于提示用户程序已经正常启动。

Service一般用于没有用户界面,但需要长时间在后台运行的应用。

BroadcaseReceiver是用来接受并响应广播消息的组件。

ContentProvider是Android系统提供的一种标准的共享数据的机制,应用程序可以通过ContentProvider访问其他 应用程序的私有数据。

参考资源:

1、Android Studio 中文社区:http://www.android-studio.org

2、Google Developers:https://developers.google.cn

原创声明

=======

作者: [ libin9iOak ]


本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任。

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
12天前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
8天前
|
安全 Android开发 iOS开发
安卓与iOS的较量:技术深度对比
【10月更文挑战第18天】 在智能手机操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两种系统的技术特点、优势以及它们之间的主要差异,帮助读者更好地理解这两个平台的独特之处。
20 0
|
5天前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
13 3
|
5天前
|
安全 Android开发 iOS开发
iOS与安卓:技术生态的双雄争霸
在当今数字化时代,智能手机操作系统的竞争愈发激烈。iOS和安卓作为两大主流平台,各自拥有独特的技术优势和市场地位。本文将从技术架构、用户体验、安全性以及开发者支持四个方面,深入探讨iOS与安卓之间的差异,并分析它们如何塑造了今天的移动技术生态。无论是追求极致体验的苹果用户,还是享受开放自由的安卓粉丝,了解这两大系统的内在逻辑对于把握未来趋势至关重要。
|
6天前
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。
|
10天前
|
安全 Android开发 iOS开发
安卓vs iOS:探索两种操作系统的独特魅力与技术深度###
【10月更文挑战第16天】 本文旨在深入浅出地探讨安卓(Android)与iOS这两种主流移动操作系统的特色、优势及背后的技术理念。通过对比分析,揭示它们各自如何塑造了移动互联网的生态,并为用户提供丰富多彩的智能体验。无论您是科技爱好者还是普通用户,都能从这篇文章中感受到技术创新带来的无限可能。 ###
26 2
|
10天前
|
机器学习/深度学习 人工智能 Android开发
安卓与iOS:技术演进的双城记
【10月更文挑战第16天】 在移动操作系统的世界里,安卓和iOS无疑是两个最重要的玩家。它们各自代表了不同的技术理念和市场策略,塑造了全球数亿用户的移动体验。本文将深入探讨这两个平台的发展历程、技术特点以及它们如何影响了我们的数字生活,旨在为读者提供一个全面而深入的视角,理解这两个操作系统背后的哲学和未来趋势。
25 2
|
15天前
|
Java Android开发 Swift
掌握安卓与iOS应用开发:技术比较与选择指南
在移动应用开发领域,谷歌的安卓和苹果的iOS系统无疑是两大巨头。它们不仅塑造了智能手机市场,还影响了开发者的日常决策。本文深入探讨了安卓与iOS平台的技术差异、开发环境及工具、以及市场表现和用户基础。通过对比分析,旨在为开发者提供实用的指导,帮助他们根据项目需求、预算限制和性能要求,做出最合适的平台选择。无论是追求高度定制的用户体验,还是期望快速进入市场,本文都将为您的开发旅程提供有价值的见解。
|
24天前
|
IDE Android开发 iOS开发
探索安卓与iOS系统的技术差异:开发者的视角
本文深入分析了安卓(Android)与苹果iOS两大移动操作系统在技术架构、开发环境、用户体验和市场策略方面的主要差异。通过对比这两种系统的不同特点,旨在为移动应用开发者提供有价值的见解,帮助他们在不同平台上做出更明智的开发决策。
|
26天前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
115 2