#3,Android Studio Android开发APP的开发语言和APP连接的数据库 总结_android studio开发语言-程序员宅基地

技术标签: gradle  webview  android-studio  xml  android  Android  

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{
    
   @Override
   protected 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开发入门与项目实战》,学习笔记使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51218153/article/details/123782325

智能推荐

qt移植到OK6410开发板linux系统过程_qt lunix 通过网线复制到开发板-程序员宅基地

文章浏览阅读1.7k次。操作系统:ubuntu 11.04交叉编译工具链:arm-linux-gcc 4.3.2 源码:qt-everywhere-opensource-src-4.7.3.tar.gz移植过程:1 下载源码,解压,进入解压后文件夹:#tar zxvf qt-everywhere-opensource-src-4.7.3.tar.gz#cd qt-everywhere-o_qt lunix 通过网线复制到开发板

集体通宵发版怎么破?阿里敏捷教练开出四道“药方”-程序员宅基地

文章浏览阅读762次。阿里妹导读:忙不完的事情,解不完的bug,每次发版都得集体熬个大通宵。干得多,结果还不好。相信绝大部分技术工作者都有过这样的困扰。今天,阿里云效敏捷教练蔡春华以团队敏捷实..._干移动外包熬夜发版

SSM框架搭建使用json遇到406错误_som.406-程序员宅基地

文章浏览阅读897次。1. 后台返回JSON格式的数据,会报406错误。(fastjson)原因:Springframework框架版本过旧,最新的版本可以。2.请求报错:No converter found for return value of type: class com.alibaba.fastjson.JSONObject原因:报这种错误表示fastjson 或 jackson 转换SpringMVC错误,需_som.406

csdn-工具 资源 大全_csdn工具站-程序员宅基地

文章浏览阅读353次。1 .Android系统在超级终端下必会的命令大全(adb shell命令大全) 2 . 顶级外语学习资源[转] 近600个教学学习资料链接 3 .电脑故障维修判断指导大全(联想内部文件)[网络转载] 4 .11月热门下载资源TOP100强力推荐! 5 .电子书下载网址大全 6 .电脑知识大全 7 .电脑DOS命令大全 8 .Windows 2003安全设置大全 9 .电脑快捷键大_csdn工具站

“做好大数据测试,我是认真的!”-程序员宅基地

文章浏览阅读1w次,点赞20次,收藏102次。阿里妹导读:大数据已然是当下的重要课题,大大小小的企业在重视大数据的同时,也渐渐重视大数据质量的问题。阿里巴巴测试开发专家小郅,今天会分享他对数据测试的系统性思考。文章内..._大数据测试工作规划

lvs+keepalived+nginx高性能负载均衡集群-程序员宅基地

文章浏览阅读4.6k次,点赞14次,收藏60次。lvs+keepalived+nginx高性能负载均衡集群项目发布时候,别人还能访问呢?双机主从热备LVS作用LVS是一个开源的软件,可以实现传输层四层负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh..._lvs+keeplived、nginx工作原理

随便推点

Android开发笔记(三十)SQLite数据库基础操作_"string create_sql = \"create table if not exists -程序员宅基地

文章浏览阅读3.2k次。SQLite语法SQLite是一个小巧的嵌入式数据库,使用方便、开发简单,手机上最早由ios运用,后来android兴起同样也采用了sqlite。sqlite的多数sql语法与oracle是一样的,下面只列出不同的地方:1、建表时为避免重复操作,应加上“IF NOT EXISTS”关键词,例如:CREATE TABLE IF NOT EXISTS table_name2、同样的,删表时_"string create_sql = \"create table if not exists \" + table_name + \" (\" + \"_id"

linux指定网卡走流量,Linux实时输出指定网卡流量-程序员宅基地

文章浏览阅读706次。理论上能正常运行ifconfig的Linux操作系统都可适用这个脚本(当然一般默认会安装perl),打印实时网卡流量和丢包数,好久前当时为了验证输出流量随手写的,多次想改得漂亮点,一直没动手,就这样吧,以免用的时候找不到其实我还想评论自己一句:把Perl写得跟C语言新手一样,真是Perl的悲哀!!!#!/usr/bin/perl -w################################..._linux 所有流量使用指定网卡

OpenCV4萌新之路——详解图像显示三兄弟 “imshow”、“namedWindow” 和“waitKey”_opencv imshow-程序员宅基地

文章浏览阅读2.2k次。OpenCV4萌新之路——详解图像显示三兄弟 “imshow”、“namedWindow” 和“waitKey”一、函数简析二、参数详解1.1 const String & winname1.2 InputArray mat2.1 int delay = 03.1 const String & winname3.2 int flags = WINDOW_AUTOSIZE三、测试代码四. 其他测试1.无限制缩放?2.支持OpenGL四、参考文献上一篇"OpenCV4萌新之路——详解图像读取函_opencv imshow

lightoj 1283 - Shelving Books DP_pipioj1283-程序员宅基地

文章浏览阅读570次。给定n个书本的厚度,然后依次放到书架上,要么放在最左边要么放在最右边,或者不放,要求书的厚度是非递减的序列。然后问最多放置多少本书。数字范围10^5,但是只有100个数字,我们先离散化一下。然后对于放置一本书来言,就是要么增大下界,要么减小上界,或者上下界都不变。那么我们可以采用dp[i][j]代表当前下界为i上界为j最多放置多少本书。对于一个新的书,就是产生dp[a[i]][j]_pipioj1283

我们一起来学习redis吧【redis的启动和关闭,配置文件详解】【redis.windows.conf和redis.windows-service.conf文件的区别】_redis.windows-service.conf和redis.windows.conf-程序员宅基地

文章浏览阅读1.1w次,点赞18次,收藏48次。1:redis的安装1.1:redis在window系统的安装省略,可以自行百度我这里安装的压缩版1.2:redis在linux系统的安装现在还没有用到,用到了再补上TODO2:redis的服务启动2.1:在windows系统中启动redis服务端使用cmd进入到redis的安装目录redis-server.exe redis.windows.conf可以在windows系统中编写一个启动文件,可以把该指令写入到startup.cmd文件中启动redis客户端重新启用一个cmd会_redis.windows-service.conf和redis.windows.conf

Sql注入waf过滤机制及绕过姿势-程序员宅基地

文章浏览阅读375次。在进行sql注入测试中总会遇到各种厂商的waf,本篇文章将对waf的过滤机制,以及常见的绕过方法进行介绍,希望在以后的测试中会对大家有所帮助。0x01 WAF的过滤机制 WAF全称网站应用级***防御系统是Web Application Firewall的简称,主要有以下四个功能:1. 审计设备--用来截获所有HTTP数据或者仅仅满足某些规则的会话 ;2. 访问控制设..._%d6%5c

推荐文章

热门文章

相关标签