2023年02月04日午夜,在搜索中文可视化编程IDE时无意中发现了B4X的官网:跨平台 RAD 开发工具 |B4X。
因为是英文网站,怕很难入手,所以当时只是下载了一个开发桌面应用程序的安装程序B4J。
一直到2023年06月30日傍晚,在多番尝试国内中文编程IDE不如意的时候,重新下载安装了B4X系列的B4A和B4J。
直至今天2023年07月12日,在多方尝试B4A入门资料的情况下折腾了十余天,终于搞清楚了B4A的安装,IDE界面、可视化布局设计器,以及大致的代码结构。
期间,有幸拜读了一线编程博主、 leslie_xin几位大佬的文章,也观看了B站云里刚的视频,还加入了《B4A自学群》的QQ群,也大致浏览了从一位QQ新朋友分享过来的陈会安关于Basic4Android开发Android APP的文档,在此一并致以谢意!
今天开始写些关于学习B4A的小文章,主要是做做笔记,汇总各种渠道获得的学习资料,再者提醒自己持续减持学习!在此过程中不免有来源于各个渠道的资料或者心得出现于记录中,如有侵权请第一时间与本人联系,本人将第一时间做出得当的处理。
B4A(Basic4Android)是一套集成开发环境(IDE,Integrated Development Environment ),据说Visual Basic语言开发者可以直接使用BASIC语法开发Android App。B4A可以将开发者在IDE撰写的BASIC代码编译转换为JAVA代码建立原生的Android App。
SDK(soft development kit ,软件开发工具包或者软件开发套件),每个平台都有独自的软件开发包,在安卓平台开发中就是Android SDK。SDK就是指可以为第三方开发者提供特定的软件包、软件框架、硬件平台、操作系统等创建应用软件开发工具的集合,并且SDK还能简单的为某个程序设计语言提供应用程序接口API的一些文件。Android SDK相当于安卓机器的操作系统,类似于windows操作系统,有版本号。没有Android SDK开发包的支持,就无法进行Android开发。
JDK(Java Development Kit,JAVA开发工具包或者JAVA开发套件)就是java开发工具包,这个包中提供了java语言的类库。也就是你要用java语言,那么电脑上必须装最新版本的JDK。
SDK与JDK版本对照参考如下表,参考: 最新安卓版本对照表,API对照表,持续更新_安卓内核版本对照表_雨季余静的博客-CSDN博客,Android各版本对应的SDK及JDK版本要求_android sdk版本_伟雪无痕的博客-CSDN博客
Android版本 | 后续版本迭代 | 首次发布日期 | 支持截止日期 | SDK(API)版本 | JDK版本 | 版本英文 | 版本中文 | Linux内核版本 |
---|---|---|---|---|---|---|---|---|
UpsideDownCake | 无 | 2023-02-08 | 34 | |||||
13(Tiramisu) | 2022-07-01 | 33 | 11 | T | 5.15.41 | |||
12L | 2021-09-23 | 32 | 11 | 5. 10.66 | ||||
12 | 2021-10-05 | 31 | 8 | S | 5.4,5.10 | |||
11 | 2020-09-09 | 30 | 8 | R | 4.14-stable,4.19-stable | |||
10 | 2019-05-08 | 2023 年 1 月 | 29 | 8 | Q | 4.9-q,4.14-q,4.19-q | ||
9 | 2018-08-06 | 2022 年 1 月 | 28 | 8 | Pie | 4.4.107, 4.9.84, and 4.14.42 | ||
8.1 | 2017-12-05 | 2021 年 6 月 | 27 | 8 | Oreo | 4.10 | ||
8.0 | 2017-08-21 | 2021 年 1 月 | 26 | 8 | Oreo | 4.10 | ||
7.1 | 7.1.1、7.1.2 | 2016-10-04 | 25 | 8 | Nougat | 4.4.1 | ||
7.0 | 无 | 2016-08-22 | 24 | 8 | Nougat | 4.4.1 | ||
6.0 | 6.0.1 | 2015-10-05 | 23 | 7 | Marshmallow | 3.18.10 | ||
5.1 | 5.1.1 | 2015-03-09 | 22 | 7 | Lollipop | 3.16.1 | ||
5.0 | 5.0.1、5.0.2 | 2014-11-12 | 21 | 7 | Lollipop | 3.16.1 | ||
4.4w | 4.4w.1、4.4w.2 | 2014-06-25 | 20 | 3.10 | ||||
4.4 | 4.4.1、4.4.2、4.4.3、4.4.4 | 2013-10-31 | 19 | 6 | KITKAT | 3.10 | ||
4.3 | 4.3.1 | 2013-07-24 | 18 | 6 | JELLY_BEAN_MR2 | 3.4.0 | ||
4.2 | 4.2.1、4.2.2 | 2012-11-13 | 17 | 6 | JELLY_BEAN_MR1 | 3.4.0 | ||
4.1 | 4.1.1、4.1.2 | 2012-07-09 | 16 | 6 | JELLY_BEAN | 3.0.31 | ||
4.0.3 | 4.0.4 | 2011-12-16 | 15 | 6 | ICE_CREAM_SANDWICH_MR1 | 3.0.1 | ||
4.0 | 4.0.1、4.0.2 | 2011-10-18 | 14 | 6 | ICE_CREAM_SANDWICH | 3.0.1 | ||
3.2 | 3.2.1、3.2.2、3.2.3、3.2.4、3.2.5、3.2.6 | 2011-07-15 | 13 | 6 | HONEYCOMB_MR2 | 2.6.36 | ||
3.1 | 2011-05-10 | 12 | 6 | HONEYCOMB_MR1 | 2.6.36 | |||
3.0 | 2011-02-22 | 11 | 6 | HONEYCOMB | 2.6.36 | |||
2.3.3 | 2.3.4、2.3.5、2.3.6、2.3.7 | 2011-02-09 | 10 | 6 | GINGERBREAD_MR1 | 2.6.35 | ||
2.3 | 2.3.1、2.3.2 | 2010-12-06 | 9 | 6 | GINGERBREAD | 2.6.35 | ||
2.2 | 2.2.1、2.2.2、2.2.3 | 2010-05-20 | 8 | 6 | FROYO | 冷冻奶酪 | 2.6.32 | |
2.1 | 2010-01-12 | 7 | 6 | ECLAIR_MR1 | 2.6.29 | |||
2.0.1 | 2009-12-03 | 6 | 6 | ECLAIR_0_1 | 2.6.29 | |||
2.0 | 2009-10-26 | 5 | 6 | ECLAIR | 闪电泡芙 | 2.6.29 | ||
1.6 | 2009-09-15 | 4 | 6 | DONUT | 甜甜圈 | 2.6.29 | ||
1.5 | 2009-04-27 | 3 | 6 | CUPCAKE | 纸杯蛋糕 | 2.6.27 | ||
1.1 | 2009-02-09 | 2 | 6 | BASE_1_1 | 2.6.X | |||
1.0 | 2008-09-23 | 1 | 6 | BASE |
不管用什么IDE编写Android APP,国产的、国外的、中文的、英文的,了解一下安卓的系统架构还是很有必要的。这就好比木匠做家具,不管用啥工具做、做什么样的款式,了解一下房子的结构布局对于做出合适的家具是有帮助的。
陈会安老师在《用Visual Basic 您也能開發Android App〈增訂版B4A┼B4i〉》说,Android系统架构”比较像蛋糕店购买的一个多层蛋糕,在行动装置的硬体和使用者之间是Android软体堆叠(Android Software Stack)...“。这里的Stack就是中文栈的意思。关于编程中的堆(Heap)和栈(Stack),路过的读者可以自行查找相关资料补脑。这里引用一下文江博客内《Android 的系统架构》文章的一张图做个记录:
上图的中文版本如下图(来源:Android 系统架构图):
一般使用者在Android系统执行的是应用程序,就是我们常说的App,也是我们使用B4A编译之后得到的apk文件安装到Android的应用。常规安卓设备内置了多种系统应用程序(我们一般不能随意卸载的),比如联系人、短信、电话、日历、时钟、浏览器等。
系统应用可用作用户的应用,以及提供开发者可从其自己的应用访问系统应用的主要功能。例如,如果您的应用要发短信,您无需自己构建该功能,可以改为调用已安装的短信应用向您指定的接收者发送消息。系统应用程序既为用户提供日常生活中常用应用程序,又为提供开发人员提供了可以直接调用系统应用的关键功能。
所有Android应用程序都是使用Java语言开发的,即使是B4A开发出来的App最终也会编译为JAVA语言。
位于应用程序之下的是应用程序框架(Application Framework ),一般都是以JAVA语言编写的系统级组件,有”JAVA库“的称号。应用程序框架一方面为开发者开发上层的应用程序(Application)提供基础的API接口,另一方面囊括了不少系统级服务进程的实现,是与Android应用程序开发者关系最直接的一层。开发者可以完全访问和使用Android系统提供的API。
Android应用程序(APP)是也是由若干个组件构成,组件与组件之间的通信是通过框架层提供的服务集中调度和传递消息实现的,而不是应用程序组件之间直接进行的。
应用程序框架一般分为十个部分:
Libraries (函数库)是支持整个系统正常运行的基础库,由于这些库多数都由C/C++实现,因此也被一些开发人员成为“C库层”,以区别于应用程序框架层的”JAVA库“。
Libraries (函数库)由一系列的二进制动态库构成,大部分来源于优秀的第三方类库,另一部分是系统原生类库,通常使用c/c++语言开发。(因为java代码无法直接调用c/c++驱动代码,所以在这一层,系统通过封装了一系列的函数库供上层使用。)
总的来说,Libraries(函数库)包含一个 C/C++库 的 集合,供 Android 系统的各个组件使用。这些功能通过 Android 的应用程序框架(application framework)暴露给开发者。
以下列举一些比较重要的类库的功能,以供了解:
Android Runime 安卓运行时是由Java核心类库(Core Libraries)和Android虚拟机(Dalvik)共同构成。
Core Labraries (核心类库)包括框架层和应用层所用到的基本Java库。核心库提供了Java语言API中的大多数功能,既兼容了大多数Java语言所需要调用的功能函数,同时也包含了 Android 的一些核心API,如 android.os、android.net、android.media 等等。
Dalvik Virtual Machine(Dalvik虚拟机)是为Android量身打造的Java虚拟机,主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。它与标准Java虚拟机JVM(JavaVirtualMachine简称JVM)的差别在于Dalvik是基于寄存器设计的,而JVM是基于栈结构设计的;JVM通过解码class文件(java编译生成的:.java—.class 的class文件)中的内容生成字节码来运行程序;而Dalvik运行时是由java字节码文件进一步转化而来的文件,并被打包成一个DEX可执行文件,Dalvik虚拟机通过解释DEX文件来执行这些字节码 ,即android的class 文件实际上只是编译过程中的中间目标文件,需要链接成dex 文件后才能在dalvik 上运行;Dalvik能够更快的编译较大的应用程序,允许在有限的内存空间中同时运行多个虚拟机的实例,每一个Dalvik应用作为一个独立的Linux进程执行,这样可以防止某一虚拟机崩溃时所有的应用都被关闭。
Google在2014年推出了新的虚拟机ART,并从Android5.0开始废弃了Dalvik,全面推行ART。ART虚拟机采用AOT(Ahead-of-time)技术,在应用程序安装时就会将字节码转换为机器码,从而优化了应用运行的速度。在内存管理方面,ART也有比较大的改进,对内存分配和回收都做了算法优化,降低了内存碎片化程度,回收时间也得以缩短。(来源:Android系统框架 - 知乎 (zhihu.com))
Dalvik 与 Java虚拟机 的区别:
Android内核具有和标准的Linux内核一样的功能,主要实现内存管理、进程调度、进程间通信(Android增加了一种进程间的通信机制IPC Binder)、设备驱动(Display Driver:显示驱动;Camera Driver: :照相机驱动;Flash Memory Driver:闪存驱动;Binder Driver:IPC通讯驱动;KeyPad Driver:键映射驱动;Wifi Driver:Wifi驱动;Audio Driver:音频驱动;Power Management:电量管理驱动)等。例如,Android Runtime (ART 即 ART 虚拟机 ) 最终调用底层 Linux 内核来处理线程和底层内存管理等底层功能。使用 Linux 内核可让 Android 利用 Linux 内核的安全机制为 Android 提供相应的保障,也允许设备制造商为内核开发硬件驱动程序。
android App(安卓应用程序)四大组件(原件)分别是:活动(Activity/Activities): 用于表现功能。服务(Services): 后台运行服务,不提供界面呈现。广播接收器(Broadcast Receivers):用于接收广播。内容提供者(Content Providers): 支持在多个应用中存储和读取数据,相当于数据库。
Android APP(安卓应用程序)不一定四种组件(元件)都有。如果拥有多个活动、广播接收器或者服务,我们可以使用意图(Intents)来启动各组件,建立更复杂的应用程序。
Android App中,Activity 是所有应用程序的根本,所有程序的流程(可以理解为逻辑,我们的程序代码。)都运行在Activity 之中,Activity可以算是开发者遇到的最频繁,也是Android 当中最基本的模块(Modules)之一。在Android的应用程序当中,Activity 一般代表手机屏幕的一屏。如果把手机屏幕比作一个浏览器,那么Activity就相当于一个网页。在Activity 当中可以添加一些Button、Check box 等控件(在B4A称为View)。其实,我们把Activity理解为页面。
一个Android 应用程序可以由一个或多个Activity 组成的。Activity 之间可以相互跳转,例如,单击一个Button 按钮后,可能会跳转到指定的Activity。Activity 之间的跳转可以有返回值,例如,从Activity A 跳转到Activity B,那么当Activity B 关闭时,可能会给Activity A 返回一个值。这样做在很多时候是相当方便的。
当打开一个新的Activity时,前一个Activity会被置为暂停(pause)状态,并且压入历史栈中。用户可以通过返回操作退回到以前打开过的Activity。
Services 是 Android App中的一种组件,它跟Activity 的级别差不多,但是他不没有界面且不能在前台运行,只能后台运行,并且可以和其他组件进行交互。Service 是没有界面的长生命周期的代码。service 可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD 卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在幕后的,是幕后操纵者。
在 Android APP中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制。而Broadcast Receiver 是对发送出来的Broadcast进行过滤接收并响应的一类组件。可以使用Broadcast Receiver 来让应用对一个外部的事件做出响应。这是非常有意思的,例如,当电话呼入这个外部事件到来的时候,可以利用BroadcastReceiver 进行处理。例如,当下载一个程序成功完成的时候,仍然可以利用BroadcastReceiver 进行处理。总之,Android可以使用广播接收器接收有兴趣的广播,或者送出广播使得其他APP知道当前APP的状态改变。
内容提供者是在不同的APP之前分享资料的接口,它是一组封装的资料,提供客制化API来读写。例如,开发者做了一个联络人的应用程序,可以不存储任何联络人的资料,可以透过内容提供者如电话本取得联络人的信息;而其他需要联络人资料的APP也可以透过同一个内容提供者或者联络人的资料。
意图(Intents)是一个启动其他Android活动、服务和广播接收器的异步讯息/信息(要执行某个操作的抽象描述)。异步(Asynchronous)是指讯息的送出和接收是相互独立的。意图可以告诉Android作业系统我想干什么?此时,作业系统是使用意图筛选(Intent Filters)来找出可以处理本意图的的最佳组件(或者说活动Activity),例如启动其他活动、告知指定服务启动或停止送出广播。
意图(Intents)是 Android 四大组件间之间的枢纽,通信的桥梁。Intent(意图)是 Android 开发至关重要的一个点,必须重点掌握。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。