一、主流移动操作系统介绍
最早的智能手机是1993年IBM推出的IBM Simon;而后相继出现Symbian、BlackBerry等操作系统;
2007年初,苹果推出了iPhone,搭载iOS操作系统;
2007年9月,Google推出Android操作系统并开源;
2010年,微软发布Windows Phone 7.0。早期为Windows Mobile 系列。2015年发布Window 10 移动版。
中国市场上的小米MIUI、华为Emotion UI、锤子Smartisan OS、魅族Flyme OS、中国移动OMS等都属于Android操作系统的深度定制版。
基于云服务加持的还有百度云操作系统、阿里云OS等,搭载的设备很少,市场份额很低。
在IOT领域,国内的阿里的AliOS Things、华为的鸿蒙OS、腾讯的 TencentOS tiny、小米的 Vela等都已经在布局发展。
Google正在研发的一个操作系统Fuchsia,设计目标之一是可运行在众多的设备上,包括移动电话和个人电脑。
二、Android开发
由美国Google公司和开放手机联盟领导及开发。基于Linux的移动设备操作系统,主要使用于移动设备,如智能手机和平板电脑。
1. 开发环境
Window、Linux、Mac OS 都可以用来开发Android应用。开发Android前需要准备的软件如下:
- Java JDK 1.5及更高版本,推荐JDK1.8(含JRE)
- Android SDK
- Android Studio
- Eclipse(可选,早期开发工具,需要安装ADT插件)
安装完JDK和SDK后,需要配置环境变量
,配置完Android SDK环境后,可使用 adb 命令
如:
$ adb shell getprop ro.product.cpu.abi
- armeabi-v7a(32位ARM设备)
- arm64-v8a(64位ARM设备)
2. 开发语言
目前开发Android的主流语言是Java和Kotlin,Kotlin时2017年Google I/0 大会上,被Google宣布在Android上为Kotlin提供一等支持,另外C++也是官方推荐的一门开发语言。
2.1. 程序入口
java
public static void main(String[] args){
System.out.println("hello world");
}
kotlin
fun main(args:Array<String>){
println("hello world")
}
2.2. 基本数据类型
Kotlin | Java |
---|---|
Int | int/Integer |
Double | double/Double |
Float | float/Float |
Long | long/Long |
Short | short/Short |
Byte | byte/Byte |
Boolean | boolean/Boolean |
java 无需初始化,但有默认值
private int b;
private boolean c;
private float d;
private long e;
Kotlin 变量必须初始化
var b:Int = 0
var c:Boolean = false
var d:Float = 0f
var e:Long = 0L
2.3. 函数
java
//有返回值
public int add(int a,int b){
return a+b;
}
//无返回值
public void print(String s){
System.out.println(s);
}
//可变长度
public void vars(String... params){
for(String s:params){
System.out.println(s);
}
}
kotlin
//有返回值
public add(a:Int,b:Int):Int{
return a.plus(b)
}
//无返回值
public print(s:String){
println(s)
}
//可变长度
fun vars(vararg v:String){
for(vt in v){
println(vt)
}
}
2.4 类
abstract class Human {
protected String name;
Human(String name) {
this.name = name;
}
abstract void eat();
}
class Man extends Human {
Man(String name) {
super(name);
}
@Override
void eat() {
System.out.println(name + "在吃饭");
}
}
class Woman extends Human {
Woman(String name) {
super(name);
}
@Override
void eat() {
System.out.println(name + "在吃饭");
}
}
public class Test {
public static void main(String[] args) {
Human man = new Man("Test1");
Human woman = new Woman("Test2");
man.eat();
woman.eat();
}
}
abstract class Human(var name: String) {
abstract fun eat()
}
class Man(name: String) : Human(name) {
override fun eat() {
println("${name}在吃饭")
}
}
class Woman(name: String) : Human(name) {
override fun eat() {
println("${name}在吃饭")
}
}
public class Test {
fun main(args: Array<String>) {
var man: Human = Man("Test1")
var woman: Human = Woman("Test2")
man.eat()
woman.eat()
}
}
3. Android应用开发
3.1. 系统架构图
自下
而上
分别是:
- Linux 内核
- HAL(硬件抽象层,服务于非开源的硬件驱动)
- 系统库(原生 C/C++ 库,可以使用 Android NDK 直接从原生代码访问某些原生平台库,如OpenGL ES;Android运行时环境,包含Java核心库和Dalvik虚拟机)
- Java API 框架层(通过以 Java 语言编写的 API 使用 Android OS 的整个功能集,包含UI、资源管理、通知管理、Activity管理、内容提供程序)
- 应用层(内置应用,如电子邮件、短信、日历、互联网浏览和联系人等核心应用)
作为一般应用开发者,交互最多的就是Java API 框架层和应用层。作为音视频开发者,接触更多的是原生C/C++库。作为定制系统开发者,会触及虚拟机和Linux 内核。
3.2. 第一个Android - “Hello World”
Android 目前可以开发手机(平板)应用、手表应用、电视应用、汽车应用和IOT应用;
3.2.1 创建应用
Android Studio : Create New Project ,选择 Empty Activity。以此设置:
- Name:应用名称,安装后应用图标下的名称。
- Package name : 包名,非常重要,将成为应用的唯一标识,通用格式
组织域名倒输.应用英文名
,如cn.leadchina.ilead
。 - Save location : 源码保存的物理位置。
- Language : 选择开发语言Java或Kotlin
- Minmun SDK : 最小支持的Android系统版本。
- 点击“FINISH”,等待片刻,就会自动进入代码编辑界面。
3.2.2 代码结构介绍
初次进入开发界面会以Android视图的形式展示代码:
可以在Project窗口中切换代码视图,我习惯于用Project视图:
开启虚拟机或者连接Android手机(需要打开USB调试模式),就可以运行这个“Hello World”应用了。
3.3.3. Android需要掌握的基础知识
- Java或Kotlin语言基础,面向对象的思想。
- 常用布局,基本UI组件的使用,常见界面布局的设计和实现。
- Android四大组件(Activity、Server、ContentProvider、BroadcastReceiver)
- 数据存储(文件、SharedPreferences、SQLite、ContentProvider)
- XML和Json数据解析(现在只需要会使用第三方库即可)
- 异步编程、网络编程、异常处理等
- 了解屏幕适配、消息推送、移动支付、第三方登录等
三、IOS开发
iOS是苹果公司为其移动设备所开发的专有移动操作系统,为其公司的许多移动设备提供操作界面,支持设备包括iPhone、iPad和iPod touch。iOS在iOS 3.2发布前名为iPhone OS,iPad版本则于iOS 13起独立为iPadOS。
1. 开发环境
只能在Mac OS X 操作系统上开发。
- 准备一台苹果电脑(黑苹果的主机或者虚拟机也可以进行基本的开发)
- Apple ID:可在Apple官网免费申请一个账户(必须)
- 安装 XCode开发工具(必须)
- 一部iPhone手机(定位、照相机、蓝牙等开发需要)
2. 开发iOS程序
- 目前可用于IOS开发语言有Objective-C和Swift,同样也可以用C++进行开发,目前主流的开发语言已经变成Swift,OC为辅。
- XCode目前也是可以开发手机、平板、电视、桌面、手表端应用,不过都只局限于苹果的操作系统之上。
四、跨平台开发技术
早期App开发,在国内一般以Android为先进行开发,发照到一定规模后再进行IOS的开发,当然实力雄厚的公司,会有两端的开发团队同步进行。但移动这个生态发展过于迅速,在激烈的市场竞争中,各方都在探索更高效的开发模式。跨平台技术也就应运而生,而且能实现跨平台开发的技术框架也是层出不穷,但大部分都是昙花一现,难有发展。
1. 跨平台技术发展
移动互联网发展了十余年,现在来讲跨平台技术,已经不单单是Android手机和IOS手机两端而已,还包括Web端,手表端,平板端,电视端,更扩展到了桌面端应用。
从技术层面上,跨平台方案可分为4大流派:
- Web技术:主要依赖WebView的技术,如一些Web App、小程序,实力雄厚的会自研浏览器内核,将小程序运行在自研的浏览器内核之上,如腾讯的X5、阿里的UC浏览器内核;
- 原生渲染:使用JavaScript作为编程语言,通过中间层转化为原生控件来渲染UI界面,比如React Native、Weex;
- 语言编译转换技术:直接将某个语言编译为一个平台下的二进制文件。比较有名的是Xamarin框架,利用C#代码编写;
- 自渲染技术:通过在不同平台实现一个统一接口的渲染引擎来绘制UI,而不依赖系统平台的原生控件,这样做可以保证不同平台UI的一致性。不用像React Native一样,随着不同平台系统版本的变化,开发者还需要处理不同平台的差异,甚至有些特性只能在单个平台上实现,这样无法保证不同平台UI的一致性。具有代表性的如Qt、Flutter
小程序的跨平台方案,主要依赖于几大移动巨头,自研App实现小程序成本较高;
原生渲染的跨平台技术方案,应用最为广泛,大部分跨平台技术选型都会选择此技术,如银行、购物、新闻类多半都是采用这种技术活着混合技术,我们公司的iWork据我判断就是用的原生渲染里面的React Native技术;
自渲染技术具具有代表性的如Qt、Flutter;我个人认为最牛逼的跨平台技术,是Qt框架,其开发语言为C++,代表作WPS。
不过我们iLead选择的技术框架是Flutter框架,因为它最适合。
2. Flutter开发框架
先看一下官方的一则简介:
Flutter is Google’s UI toolkit for building beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.
简单翻译一下:
Flutter是谷歌主导研发的一个UI工具包,可以利用它,使用非常简洁的代码开发出漂亮的、原生的应用程序,无论是在移动端、Web端还是桌面端。
Ps:Web端和桌面端尚未发布正式版,开发版上体验还很差,Flutter主要还是活跃于移动端。
2.1. Flutter分层结构
Flutter 在设计之初,就是一个可扩展的分层架构系统。 它是各个独立的组件的系列合集,这些组件各自依赖了底层。 组件们无法越权访问更底层的内容,并且它们每一个都是可选且可替代的。
Engine
毫无疑问是Flutter的核心,它基本使用 C++
进行编写,支持所有 Flutter 应用所需的原语[1]。 当需要绘制新一帧的内容时,引擎将负责对需要合成的场景进行栅格化。 它提供了 Flutter 核心 API 的底层实现,包括图形(通过 Skia)、 文本布局、文件及网络 IO、辅助功能支持、插件架构和 Dart 运行环境及编译环境的工具链。
引擎将底层 C++
代码包装成 Dart
代码,通过 dart:ui
暴露给 Flutter
框架层。 该库暴露了最底层的原语, 包括驱动输入、图形、和文本渲染的子系统的类。
一般而言,开发者会使用以现代语言(Dart
语言)及响应式框架编写的Framework
来与 Flutter进行交互。
2.2 Dart语言
2.2.1 简介
由Google
主导开发,于2011年10月公开,开发源码的编程语言。早期定位是成为下一代结构化Web开发语言。
从技术上来说,Dart已经支持移动端、Web端和服务器端开发;
Ps. 借助于Flutter开发框架的大热,Dart才进入大部分开发者视野之中,其表现最优异的还是在移动端上。
2.2.2. 简单入门
入口函数
void main(){
print("Hello World!");
}
变量
var name = 'Voyager I';
int year = 1977;
var antennaDiameter = 3.7;
var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune'];
var image = {
'tags': ['saturn'],
'url': '//path/to/saturn.jpg'
};
函数
int fibonacci(int n) {
if (n == 0 || n == 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
var result = fibonacci(20);
void functionTest(String name ,{int age, bool sex = false }){
// 处理逻辑
print("$name,${age??''},$sex")
}
functionTest("张三", sex = true, age = 3);// 张三,3,true
functionTest("李四", age = 4); // 李四,4,false
functionTest("王五"); // 王五,,false
控制语句
if (year >= 2001) {
print('21st century');
} else if (year >= 1901) {
print('20th century');
}
for (var object in flybyObjects) {
print(object);
}
for (int month = 1; month <= 12; month++) {
print(month);
}
while (year < 2016) {
year += 1;
}
类
/// 航天器
class Spacecraft {
/// 名称
String name;
/// 起飞时间
DateTime launchDate;
// 构造函数,使用语法糖设置成员变量。
Spacecraft(this.name, this.launchDate) {
// 这里编写初始化代码。
}
// 命名构造函数,最终调用默认构造函数。
Spacecraft.unlaunched(String name) : this(name, null);
int get launchYear => launchDate?.year; // read-only non-final 属性
// 方法。
void describe() {
print('飞行器: $name');
if (launchDate != null) {
int years =
DateTime.now().difference(launchDate).inDays ~/
365;
print('已起飞: $launchYear (已经飞行 $years 年)');
} else {
print('未起飞');
}
}
}
// 创建对象
var shengZhou11 = Spacecraft("神舟十一号",DateTime(2016,10,17));
shengZhou11.describe();
var shengZhou12 = Spacecraft.unlaunched("神舟十二号");
shengZhou12.describe();
2.3. 搭建Flutter开发环境
- 配置Android开发环境
- 配置XCode开发环境
- 安装Flutter开发环境
- 选择
VS Code
或Android Studio
作为开发工具,并安装Flutter
插件
Flutter目前支持在Windows、Linux、MacOS、Chrome OS 四个操作系统上进行开发。大体安装类似,前提都是需要安装Git。
flutter开源地址:https://github.com/flutter/flutter.git
1. 需要用 git 或手动下载 stable 分支
git clone https://github.com/flutter/flutter.git -b stable
2. 配置环境变量
将 flutter bin
目录加入环境变量;如果是国内网络,可再配置下国内镜像,以便下载相关类库。
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
3. 打开命令行工具进行安装
flutter doctor
2.4. 创建Flutter应用程序
2.4.1. 创建应用
命令进创建
flutter create flutter_project_name
详细的命令参数,可使用 flutter create -h
查看。
Android Studio
Create New Flutter Project
-> Flutter Application
(设置项目名称,代码存放位置) -> 设置Package Name
;
2.4.2. Flutter代码结构
2.5 Flutter需要掌握的基础知识
- 计算机进程的控制通常由原语完成。所谓原语,一般是指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程中不可被中断。 ↩︎