android架构

安装与配置Flutter开发环境

旧巷老猫 提交于 2020-02-26 05:29:52
这篇博客 我们介绍了Flutter,并且对比了H5,React Native,Flutter。 由于Flutter是跨平台的开发框架,开发一次可以同时运行在Android和iOS上面,所以我们开发时最好使用Mac系统,这样我们可以同时测试两个平台的运行效果。 本文我们就来介绍在Mac系统下安装与配置Flutter开发环境,并且运行我们的第一个Flutter应用! 为了Flutter的安装配置顺利,请科学上网。 安装Flutter SDK 首先,我们需要首先下载Flutter的SDK,通过官网的 这个链接 可以找到每个版本的下载链接,找到最新稳定版下载。写这篇文章时的最新版是v1.2.1版本,我们就以这个版本来举例。 下载完成后我们对SDK进行解压,可以解压到任何位置。我们这里解压到用户主目录下的development目录。下面我们打开终端执行以下命令: mkdir ~/development cd ~/development unzip ~/Downloads/flutter_macos_v1.2.1-stable.zip 将解压后的路径加入到环境变量中。 打开用户目录下的.bash_profile文件,如果没有则新建这个文件: > ~/.bash_profile 在这个文件的最后添加SDK的路径到PATH中: export PATH="用户路径/development

Android深度探索(卷1):安装C/C++交叉编译环境

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-25 02:45:50
X86架构的CPU采用的是复杂指令集(Complex Instruction Set Computer,CICS),而ARM架构的CPU使用的是精简指令集(Reduced Instruction Set Computer,RISC)。由于这两种架构的CPU使用了不同的指令集,因此在X86架构上开发可运行在ARM架构上的程序就必须要使用交叉编译器。通常交叉编译器和相关工具包含的了很多可执行文件以及大量的共享库及头文件等资源。这些资源的集合称为交叉编译环境。 在Internet上可以找到集成好的交叉编译环境,Android NDK和Android源代码中也包含的交叉编译环境。当然,如果我们需要一个完全独立的交叉编译环境,可以下载集成好的交叉编译环境,也可以自己制作(比较复杂,建议读者下载集成好的交叉编译环境)。下面介绍一个CodeSourcery交叉编译环境,这个交叉编译环境直接下载安装就可以安装。 读者可通过如下的网站访问CodeSourcery下载页面。 http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ 上面的页面并未直接提供CodeSourcery的下载链接,读者可以点击“Download the GNU/Linux Release”链接

理解Android虚拟机体系结构

社会主义新天地 提交于 2020-02-24 17:32:10
1 什么是Dalvik虚拟机   Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Google对其进行了特定的优化,使得Dalvik具有高效、简洁、节省资源的特点。从Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层。 2 Dalvik虚拟机的功能   Dalvik作为面向Linux、为嵌入式操作系统设计的虚拟机,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全和异常管理,以及垃圾回收等。Dalvik充分利用Linux进程管理的特定,对其进行了面向对象的设计,使得可以同时运行多个进程,而传统的Java程序通常只能运行一个进程,这也是为什么Android不采用JVM的原因。Dalvik为了达到优化的目的,底层的操作大多和系统内核相关,或者直接调用内核接口。另外,Dalvik早期并没有JIT编译器,直到Android2.2才加入了对JIT的技术支持。 3 Dalvik虚拟机和Java虚拟机的区别   本质上,Dalvik也是一个Java虚拟机。但它特别之处在于没有使用JVM规范。大多数Java虚拟机都是基于栈的结构(详情请参考:

新年新气象,接个私活赚点生活费?说说这里的弯弯绕

强颜欢笑 提交于 2020-02-22 05:03:00
现在到处讲副业,怎么样利用副业赚钱,这能理解,一方面年轻人生存压力大,多赚钱点总是没有坏处;另一方面,每年的裁员信息看的人心惊胆颤,大家都想为自己留一条后路。 新年伊始,想必很多小伙伴可能都想大展拳脚,新的一年好好干一番,很多人就想到了接私活,但是接私活到底赚不赚钱,这里有哪些坑,松哥和大家扯扯。 松哥刚毕业的时候做 Android 开发,在做 Android 期间基本上没有接过私活,因为 Android 有一个特点,就是应用看着很简单,在甲方眼里可能就是画几个页面,但是实际操作起来,要考虑各种各样的机型适配、屏幕适配、甚至系统适配(由于国内厂商做了各种定制带来的)等操作,也算是一件非常费力的事情。由于和甲方这种认知上的差异, Android 的活很难谈上价钱,所以就没接过。 直接接应用做虽然没有做过,但是 Android 有另外一个灰产,就是做“二次打包”的羊毛党,这个几乎不需要很高的技术手法,把别人发布的 App 拿来,拆包之后,加入自己的私货(大部分情况下可能是广告),然后再发布出去供用户下载,就能赚钱了。由于 Android 的开源,加上二次打包成本低,导致这一现象曾经非常猖獗,在 Google Play 排名前 100 位的应用中,有 60% 的应用出现了二次打包版本,而这 60% 的应用中,大部分都是游戏类应用,高 ARPU 游戏,单个安装激活价也比较高。

Android Jetpack(六)Navigation

╄→гoц情女王★ 提交于 2020-02-21 19:06:05
一、Navigation 介绍 Navigation 是 Jetpack 组件库的一个组件, 可以方便的管理 Fragment ,可以看作是针对于 Fragment 的路由。 功能主要是: 用于管理 APP 页面跳转导航 ,同时, 切换 Fragment 变得更加直观 ,通过 可视化界面 展示 Fragment 的切换流程图。 利用 Navigation 组件对 Fragment 的原生支持,可以获得架构组件的所有好处(例如生命周期和 ViewModel),同时让此组件来处理 FragmentTransaction 的复杂性。此外,Navigation 组件还可以处理转场动画。它可以 自动构建正确的“向上”和“返回”行为 ,包含对深层链接的完整支持,并提供了帮助程序,用于将导航关联到合适的 UI 小部件,例如抽屉式导航栏和底部导航。 除此之外,Navigation 最大的一个好处是: 让单 Activity 应用成为首选架构(即: 单 Activity + 多 Fragment ) 。应用内 Fragment 页面的跳转则由 Navigation 来处理,开发者无需在处理 FragmentTransaction 的复杂性以及相关的转场动画。 二、 Navigation 核心概念 NavGraph:导航图 ,一个 XML 资源,它包含集中在一个位置上的所有与导航相关的信息

Android Studio 学习笔记(四):Adapter和RecyclerView说明

醉酒当歌 提交于 2020-02-18 21:36:40
在现版本中,滚动控件有多种,而相比于ListView,GridView,RecyclerView的用途更广,因此将前两者作为Adapter适配器的引入,再对RecyclerView进行简单讲解。 MVC & Adapter 为了方便理解,这里介绍一下Android应用设计的基础,也就是MVC架构,如图。 控制器(Controller)- 可看作一个中间桥梁,响应来自View的用户交互,通过对View设定的事件逻辑修改Model,再回传实现View的数据刷新。 视图(View) - 用户看到的图形界面,由界面设计人员负责。 模型(Model) - 保存数据状态,其中由程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。 MVC架构:Model(数据)以Controller(控制器)设定的方式呈现在View(用户界面)中。 简而言之:Adapter在其中充当Controller(控制器)的角色,在其中设定每一个元素长什么样子,怎么排列各个元素的逻辑,再把包含代码逻辑的复杂数据按设定好的样式给View。其中自带的BaseAdapter用得最多。 常见用法是新建一个类继承自BaseAdapter,重写其中的方法并构造新的方法,结合ListView、GridView控件使用。 ListView和GridView的用法相似,只是功能不同

Android 5.1 Camera 架构学习之Camera初始化

拈花ヽ惹草 提交于 2020-02-15 05:42:09
Android Camera 采用C/S架构,client 与server两个独立的线程之间(CameraService)使用Binder通信。 一 CameraService的注册。 1.手机开机后,会走init.rc流程,init.rc会启动MediaServer Service。 service media /system/bin/mediaserver class main user root #### # google default #### # user media #### group audio camera inet net_bt net_bt_admin net_bw_acct drmrpc mediadrm media sdcard_r system net_bt_stack #### # google default #### # group audio camera inet net_bt net_bt_admin net_bw_acct drmrpc mediadrm #### ioprio rt 4 2.MediaServer的main函数位于frameworks/base/media/mediaserver/main_mediaserver.cpp中。 在Main_MediaServer.cpp的main函数中,CameraService完成了注册

微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?

大兔子大兔子 提交于 2020-02-13 08:38:25
本文来自微信开发团队yanyang的技术分享。 1、引言 相信大家都遇到过一段特殊文本可以让iOS设备所有app闪退的经历。前段时间大年初一,又出现某个印度语字符引起iOS11系统奔溃,所幸iOS版微信客户端做了保护并没有引起太大问题(字符处理这类技术问题,其实曾在Android版微信上导致过严重的用户体验危机,感兴趣的可以看看文章《 微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉 》)。 一般来说,特殊字符闪退是系统漏洞引起,只要更新系统就行。但大部分用户不愿意更新系统,而苹果也不一定第一时间解决问题。另外后台可以拦截恶意文本传递,但对于本地已下发的消息,后台没有办法让它删除。所以客户端还是要做些保护预防特殊字符闪退。 学习交流: - 即时通讯开发交流群: 320837163 [推荐] - 移动端IM开发入门文章:《 新手入门一篇就够:从零开发移动端IM 》 (本文同步发布于: http://www.52im.net/thread-1449-1-1.html ) 2、微信的思路 由于无法事先知道字符串里包含特殊字符,所以只能先让它排版/绘制,看看是否出现问题。做法是,在排版/绘制字符串前,先设置标记位,排版/绘制结束后,移除标记位。 一旦发现标记位存在,就意味着这字符串可能有问题,下次就不显示这个字符串: 这里有几个问题: 有可能在排版/绘制过程中

【UML】如何看Android的UML图

会有一股神秘感。 提交于 2020-02-12 04:58:40
UML图有很多类型,这里只讨论最重要也最常用的两种 - 类图和时序图。 1. 类图 通过类图,我们可以很容易的了解代码架构,理清模块之间的关系, 包括继承(Inheritance),实现(realization),依赖(dependency),组合(Composition), 聚合(Aggregation), 关联 (Association) 等等。 下面就图中给出的7种关系一一解读。 1.1 Composition Compostion 是一种 Association 关系,但它更 强调两个类之间整体和局部关系 ,它暗示两个类之间有着相同的生命周期, 比如说图中的三个1. W 是 ViewRootImpl的成员变量之一,ViewRootImpl 对象的构造函数里也构造了W,因此,当ViewRootImpl 析构时,W也被析构,他们的生命周期是一致的。 public final class ViewRootImpl implements ViewParent, View.AttachInfo.Callbacks, HardwareRenderer.HardwareDrawCallbacks { ... final W mWindow; ... mWindow = new W(this); //互相引用,所以当一个销毁时,另外一个也无法存在。 } View Code

Android-webview和js互相调用

和自甴很熟 提交于 2020-02-10 03:35:20
Android-webview和js互相调用 Android 和 H5 都是移动开发应用的非常广泛。市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的页面是得不偿失的。而H5具有开发速度快,更新不用依赖于App的更新,只需要服务端更新相应的页面即可,所以,App和H5页面相结合就显得尤为重要。而android和H5都不可能每次都是独立存在的,而是相互影响也相互的调用,获取信息等,例如,H5页面要获取App中的用户的基本信息,或者App端要操作H5页面等,下面来看看这两是怎么交互的。 先来看一下项目的整体架构(Android studio中的项目) 整个项目的结构就是这样的,里面最主要的就是assets下面的js_webView.html文件和代码中的WebViewJsActivity,其中项目里面的MainActivity只是做了个跳转而已,跳转到WebViewJsActivity。就这样。 下面上代码:(js_webView.html) html里面的代码也比较简单,整个html中就一个Button,点击这个Button的时候去执行javascript中的 jsCallAndroid() 方法。 网页中有关 javascript 的代码也比较简单,整个 js 就2个方法,一个是 jsCallAndroid() ,一个是