App的开发语言

基于安卓系统的App开发主要有两大技术路线,分别是原生开发和混合开发。原生开发指的是在移动平台上利用官方提供的编程语言(例如Java、Kotlin等)、开发工具包(SDK)、开发环境(Android Studio)进行App开发;混合开发指的是结合原生与H5技术开发混合应用,也就是将部分App页面改成内嵌的网页,这样无须升级App、只要覆盖服务器上的网页,即可动态更新App页面。
不管是原生开发还是混合开发,都要求掌握Android Studio的开发技能,因为混合开发本质上依赖于原生开发,如果没有原生开发的皮,哪里还有混合开发的毛呢?单就原生开发而言,又涉及多种编程语言,包括Java、Kotlin、C/C++、XML等。

Java
Java是Android开发的主要编程语言,在创建新项目时,弹出如图2-4所示的项目配置对话框,看见Language栏默认选择了Java,表示该项目采用Java编码。
虽然Android开发需要Java环境,但没要求电脑上必须事先安装JDK,因为Android Studio已经自带了JRE。依次选择菜单File→Project Structure。

单击项目结构对话框左侧的SDK Location,对话框右边从上到下依次排列着“Android SDK location”、“Android NDK location”、“JDK location”,其中下方的JDK location提示位于Android Studio安装路径的JRE目录下,它正是Android Studio自带的Java运行环境。

可是Android Studio自带的JRE看不出来基于Java哪个版本,它支不支持最新的Java版本呢?其实Android Studio自带的JRE默认采用Java 7编译,如果在代码里直接书写Java 8语句就会报错,比如Java 8引入了Lambda表达式,下面代码通过Lambda表达式给整型数组排序:

能否想办法让Android Studio也支持Java 8呢?当然可以,只要略施小计便可,依次选择菜单File→Project Structure,在弹出的项目结构对话框左侧单击Modules。

对话框右侧的Properties选项卡,从上到下依次排列着“Compile Sdk Version”、“Build Tool Version”、“NDK Version”、“Source Compatibility”、“Target Compatibility”,这5项分别代表:编译的SDK版本、构建工具的版本、编译C/C++代码的NDK版本、源代码兼容性、目标兼容性,其中后面两项用来设置Java代码的兼容版本。单击“Source Compatibility”右边的下拉箭头按钮。

从下拉列表中看到,Android Studio自带的JRE支持Java 6、Java 7、Java 8三种版本。单击选中列表项的“1.8(Java 8)”,并在“Target Compatibility”栏也选择“1.8(Java 8)”,然后单击窗口下方的OK按钮,就能将编译模块的Java版本改成Java 8了。

Kotlin

Kotlin是谷歌官方力推的又一种编程语言,它与Java同样基于JVM(Java Virtual Machine,即Java虚拟机),且完全兼容Java语言。创建新项目时,在Language栏下拉可选择Kotlin。

C/C++
不管是Java还是Kotlin,它们都属于解释型语言,这类语言在运行之时才将程序翻译成机器语言,故而执行效率偏低。虽然现在手机配置越来越高,大多数场景的App运行都很流畅,但是涉及图像与音视频处理等复杂运算的场合,解释型语言的性能瓶颈便暴露出来。
编译型语言在首次编译时就将代码编译为机器语言,后续运行无须重新编译,直接使用之前的编译文件即可,因此执行效率比解释型语言高。C/C++正是编译型语言的代表,它能够有效弥补解释型语言的性能缺憾,借助于JNI技术(Java Native Interface,即Java原生接口),Java代码允许调用C/C++编写的程序。事实上,Android的SDK开发包内部定义了许多JNI接口,包括图像读写在内的底层代码均由C/C++编写,再由外部通过封装好的Java方法调用。
不过Android系统的JNI编程属于高级开发内容,无须关注JNI开发,也不要求掌握C/C++。

XML
XML全称为Extensible Markup Language,即可扩展标记语言,XML并非编程语言,只是一种标记语言。它类似于HTML,利用各种标签表达页面元素,以及各元素之间的层级关系及其排列组合。每个XML标签都是独立的控件对象,标签内部的属性以“android:”打头,表示这是标准的安卓属性,各属性分别代表控件的某种规格。比如下面是以XML书写的文本控件:

上面的标签名称为TextView,翻译过来叫文本视图,该标签携带4个属性,说明如下:
· id:控件的编号。
· layout_width:控件的布局宽度,wrap_content表示刚好包住该控件的内容。
· layout_height:控件的布局高度,wrap_content表示刚好包住该控件的内容。
· text:控件的文本,也就是文本视图要显示什么文字。
综合起来,以上XML代码所表达的意思为:这是一个名为tv_hello的文本视图,显示的文字内容是“Hello World!”,它的宽度和高度都要刚好包住这些文字。

App连接的数据库
在学习Java编程的时候,基本会学到数据库操作,通过JDBC连接数据库进行记录的增删改查,这个数据库可能是MySQL,也可能是Oracle,还可能是SQL Server。然而手机应用不能直接操作上述几种数据库,因为数据库软件也得像应用软件那样安装到操作系上,比如MySQL提供了Windows系统的安装包,也提供了Linux系统的安装包,可是它没有提供Android系统的安装包呢,所以MySQL没法在Android系统上安装,手机里面的App也就不能直连MySQL。

既然MySQL、Oracle这些企业数据库无法在手机安装,那么App怎样管理业务方面的数据记录呢?其实Android早已内置了专门的数据库名为SQLite,它遵循关系数据库的设计理念,SQL语法类似于MySQL。不同之处在于,SQLite无须单独安装,因为它内嵌到应用进程当中,所以App无须配置连接信息,即可直接对其增删改查。由于SQLite嵌入到应用程序,省去了配置数据库服务器的开销,因此它又被归类为嵌入式数据库。

可是SQLite的数据库文件保存在手机上,开发者拿不到用户的手机,如何获取App存储的业务数据?比如用户的注册信息、用户的购物记录。如果像Java Web那样,业务数据统一保存在后端的数据库服务器,开发者只要登录数据库服务器,就能方便地查询导出需要的记录信息。

手机端的App,连同程序代码及其内置的嵌入式数据库,其实是个又独立又完整的程序实体,它只负责手机上的用户交互与信息处理,该实体被称作客户端。而后端的Java Web服务,包括Web代码和数据库服务器,同样构成另一个单独运行的程序实体,它只负责后台的业务逻辑与数据库操作,该实体被称作服务端。客户端与服务端之前通过HTTP接口通信,每当客户端觉得需要把信息发给服务端,或者需要从服务端获取信息时,客户端便向服务端发起HTTP请求,服务端收到客户端的请求之后,根据规则完成数据处理,并将处理结果返回给客户端。这样客户端经由HTTP接口并借服务端之手,方能间接读写后端的数据库服务器(如MySQL)。

客户端与服务端分别操作的数据库

由此看来,一个具备用户管理功能的App系统,实际上并不单单只是手机上的一个应用,还包括与其对应的Java Web服务。手机里的客户端App,面向的是手机用户,App与用户之间通过手机屏幕交互;而后端的服务程序,面向的是手机App,客户端与服务端之间通过HTTP接口交互。客户端和服务端这种多对一的架构关系:

手机App能够直接操作内置的SQLite数据库,但不能直接操作MySQL这种企业数据库。必须事先搭建好服务端程序(如Java Web),然后客户端与服务端通过HTTP接口通信,再由服务端操作以MySQL为代表的数据库服务器。

观察APP的运行日志
虽然在模拟器上能够看到App的运行,却无法看到App的调试信息。以前写Java代码的时候,通过System.out.println可以很方便地向IDEA的控制台输出日志,当然Android Studio也允许查看App的运行日志,只是Android不使用System.out.println,而是采用Log工具打印日志。
有别于System.out.println,Log工具将各类日志划分为5个等级,每个等级的重要性是不一样的,这些日志等级按照从高到低的顺序依次说明如下:
· Log.e:表示错误信息,比如可能导致程序崩溃的异常。
· Log.w:表示警告信息。
· Log.i:表示一般消息。
· Log.d:表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试。
· Log.v:表示冗余信息。

一般而言,日常开发使用Log.d即可,下面是给App添加日志信息的代码例子:

import android.util.Log;public class MainActivity extends AppCompatActivity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContenView(R.layout.activity_main);Log.d("MainActivity","你好");//添加一行日志信息}}

重新运行测试App,等模拟器刷新App界面后,单击Android Studio底部的“Logcat”标签,此时主界面下方弹出一排日志窗口.


日志窗口的顶部是一排条件筛选框,从左到右依次为:测试设备的名称(如“Pixel_2_API_30”)、测试App的包名(例如只显示com.example.myapp的日志)、查看日志的级别(例如只显示级别不低于Debug即Log.d的日志)、日志包含的字符串(例如只显示包含MainActivity的日志),还有最后一个是筛选控制选项(其中“Show only selected application”表示只显示选中的应用日志,而“No Filters”则表示不过滤任何条件)。一排条件筛选之后,logcat窗口只显示一行“D/MainActivity:我看到你了”,说明成功捕获前面代码调用Log.d的日志信息。

摘自欧阳燊的《Android APP开发入门与项目实战》,学习笔记使用

#3,Android Studio Android开发APP的开发语言和APP连接的数据库 总结相关推荐

  1. AndroidStudio制作欢迎界面与应用图标,使用Android Studio 3.0.1作为开发工具

    点击上方    "黄广达"    ,选择    "置顶公众号" 有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 前言 大家好,我是  ...

  2. Android Studio 使用Vuforia(高通)开发AR

    AR作为现在的前端新技术,在许多APP中运用到,那么如何在Android studio开发环境下编译运行AR项目呢,请按下面步骤走: 1.搭建Android studio android 开发环境 这 ...

  3. Android Studio 4.0.+NDK项目开发详细教学

    JNI开发系列目录 JNI开发必学C++基础 JNI开发必学C++使用实践 Android Studio 4.0.+NDK项目开发详细教学 Android NDK与JNI的区别有何不同? Androi ...

  4. android studio无app项,Android studio 3.0:无法解析依赖:app @ dexOptions

    Android studio 3.0:无法解析依赖:app @ dexOptions 我迁移到Android studio 3.0.因此,项目无法编译名为":animator"的模 ...

  5. Android Studio官方文档之添加URL和App索引支持

    Android Studio官方文档之添加URL和App索引支持 本文由nyk翻译,jkYishon审校. Android Studio可以帮你在App中添加对URLs,app索引,搜索功能的支持.这 ...

  6. 基于Android Studio实现的功能强大的购物商城APP源码,可做Android Studio毕业设计、大作业

    Android 购物商城app 完整代码下载地址:基于Android Studio实现的功能强大的购物商城APP源码 实现的功能: 注册 登录 修改密码 重置密码(邮箱验证,考核结束将移除授权码) 商 ...

  7. [Android Studio] Android Studio常用快捷键

    [Android Studio] Android Studio常用快捷键 (会持续更新)这边讲的常用快捷键是指做完Keymap到Eclipse后的,不是纯Android Studio的,这边主要讲下比 ...

  8. android studio for Mac 关于华为手机的真机连接

    android studio for Mac 关于华为手机的真机连接 step one:需要确保手机的Android版本不低于应用程序所支持的最低SDK版本. step two:用数据线将手机与电脑连 ...

  9. 小米5 android studio,Android应用开发android studio运行app,使用模拟器可以,用小米5手机安装失败...

    本文将带你了解Android应用开发android studio运行app,使用模拟器可以,用小米5手机安装失败,希望本文对大家学Android有所帮助. < 报错 Session 'app': ...

  10. android studio scala插件,Scala 语言开发Andorid ,开发环境的搭建(一)

    Scala 语言开发Andorid ,开发环境的搭建 厌倦 Java 繁琐的语法,为了更优雅的开发 Android 程序,Scala 代替 Java 是一个不错的尝试. 开发前可以学习 Scala 的 ...

最新文章

  1. Spring Data JPA例子[基于Spring Boot、Mysql]
  2. 清单革命:为什么不仅是工具革命
  3. The method setOnClickListener(View.OnClickListener) in the type View is not applicable
  4. HBase: Thrift写数据报错——socket.error: [Errno 32] Broken pip
  5. android采用什么图标单位,Android支持的长度单位
  6. 如何知道一个域名是否存在_域名检测API实现查看一个域名在微信中是否被封
  7. 【python核心编程】第六章 序列
  8. BugkuCTF-Reverse题特殊的Base64
  9. leetcode 61 Rotate List ----- java
  10. x9此计算机上没有hasp_中琅条码打印软件安装后弹出HASP错误代码处理方法
  11. vray渲染里服务器信息,VRay分布式渲染详细介绍
  12. 云计算10个入门基础知识
  13. win7笔记本电脑设置WiFi热点
  14. 免费地图制作软件,在线做地图的平台推荐
  15. happen-before是什么
  16. 与“雾霾”相关的英语表达
  17. HDMI2.0RE驱动控制方案AG7120和AG7220性能参数对比
  18. 落户上海市高校毕业生就业指导中心集体户口办理办法
  19. bio 生信博主网站 blog
  20. win10系统下安装tensorflow总结

热门文章

  1. 快速成为脚本小子_什么是脚本小子? 如何成为脚本小子?
  2. puts和printf的区别
  3. Vue实现简单的音乐播放器
  4. 一周技术学习笔记(第58期)-如何突破第四章障碍
  5. 切片器可以设置日期格式?_在Power BI中设置切片器的默认值,你会吗?
  6. 逻辑回归(公式推导+numpy实现)
  7. Python实现逻辑门
  8. 再见python你好go语言_再见,Python!你好,Go语言
  9. 向App Store提交二进制文件时报错ERROR ITMS-90096
  10. android 高通手机精品游戏合集