Android系统编程入门系列之应用环境及开发环境介绍
作为移动端操作系统,目前最新的Android 11.0已经发展的比较完善了,现在也到了系统的整理一番的时间,接下来的系列文章将以Android开发者为中心,争取用归纳总结的态度对初级入门者所应掌握的基础知识聊以标记。
应用环境
Android系统是Google基于Linux系统开发的一套移动系统,不仅应用于手机,还有穿戴设备,TV大屏设备等多种移动场景,其优势是使得硬件具有人性化的界面(Activity),并行的服务(Service),高效的数据存储(ContentProvider),实时的通知调度(BroadcastReceiver)。然而这十多年也累积了很多弊端,像是颇为诟病的碎片化问题,被攻击的安全隐私问题等。好在官方也在深度维护着Android,基于Android系统的软件开发开发人员只能尽量规避劣势,充分发挥优势。这也是该系列文章的主旨。
在Android系统中,每个应用程序都运行在一个单独的沙箱环境中,不同应用程序之间的交互受到的限制也越来越多,这一点在Android10及以上的版本中尤为明显。(Android系统版本适配)
我们所看到的系统主界面,也是一个名为Launcher的应用程序,每个应用程序都会有一个主进程,主进程主要负责与用户的交互,包括界面显示,用户操作等。(Android系统进程及线程)
为了防止不同应用程序之间的越级操作产生安全问题,Android系统将应用程序分为了系统应用和第三方应用,不同级别的应用程序能使用的AndroidSDK接口及Android权限被严格区分。有一种简单区分系统应用和第三方应用的方法,在没有root的系统上,如果是第三方应用,允许正常用户卸载,反之就是系统应用。而这里所说的root系统,就是将Android系统上的用户权限升级为管理员权限,此行为类似于Linux系统中的su root指令。
上面的描述比较随意,如果对Android系统的底层调用感兴趣,可参考菜鸟教程-Android系统架构及其他相关文章,不再过多赘述。
通常意义上,初级的Android应用程序编程,是负责应用程序内部与AndroidSDK接口之间的交流,或涉及到应用程序与系统应用之间的交互,从而生成后缀为apk的应用安装包,以确保应用程序在Android系统上安装、运行。这也是该系列文章所涉及的范围。
本质上后缀为apk的安装包是Android系统可识别的zip压缩包,所以在电脑上可以直接将安装包的后缀改为zip,之后用压缩软件解压打开,就可以一窥究竟。下图是通过开发软件创建模板项目,以Kotlin语言开发的HelloWord安装包的解压效果。
打开这个安装包后,Android系统首先会使用META-INF文件夹下的一系列签名信息,用以校验该apk是由合法签名者发布的,而且也可以校验apk中的文件都是没有被篡改的。
之后系统会根据AndroidManifest.xml清单文件中记录的一些基本信息,供系统安装及开始运行前检查加载,当然这样解压出来的内容是计算机识别的二进制内容。
而程序最主要的逻辑代码,在classes.dex中,如果代码过多,还会有classes1.dex,classes2.dex, ...无限增加,而每个dex文件最多只能有65535个方法。
在逻辑代码中会加载使用一些图标或全局配置变量,而这些都会以xml格式的形式分类保存在res资源目录下,该目录下的子目录名包括子文件名都是Android系统规定的固定名称,其填写内容也必须符合固定格式。如果想在存放自定义的文件,可以新建assets目录使用。
在classes.dex文件和res目录之间并不是可以直接对应查找的。通常编程在res中使用的变量大多是String字符串,而且繁琐的变量名在逻辑代码中会占据大量存储空间。为了缩减classes.dex文件大小,在应用程序编译阶段,编译器会将res中的繁长变量名转换为int类型的十六进制数字表示,形成一一映射的关系,并将该关系保存在resources.arsc中,这样在逻辑代码classes.dex中使用res目录下的资源时,只需要用一个int变量表示,之后到resources.arsc中找到对应的资源变量,再去res中查找该资源变量的内容。
另外,如果开发的应用程序有使用到Kotlin语言,该压缩包中还会有kotlin目录,该目录下保存了使用的Kotlin语言中的一些定义,从而将编程阶段使用的Kotlin直接转换为dex文件。
开发环境
在Android系统4.0时代,Eclipse和AndroidStudio在Android应用开发软件市场中还是双足鼎立的状态,但是随着后来的市场发展,AndroidStudio越来越占据主导地位。至少目前看来AndroidStudio还是官方主推的Android应用编程开发软件,安装下载流程可参考AndroidStudio官方链接。
AndroidStudio是基于JetBrain Idea开发的一款软件,所以延续了JetBrain系列的风格。还是以上边HelloWord应用程序的代码为例,在AndroidStudio中以Android视图查看截图如下
这里可以看到该项目下主要有两个目录
第一个app目录是与应用开发相关的,为了实现分包管理开发的目的,AndroidStudio引入module模块的概念,而这个app目录就是一个module。在应用的模块开发策略中,经常见到多个模块的组装依赖,而项目的根目录下就会产生对应模块的目录结构。
下边的GradleScripts目录与gradle插件有关,说到gradle,主要是AndroidStudio用它来执行编译app的相关指令,在正常开发中尽量保持AndroidStudio版本与gradle插件版本一一对应的关系,不然很可能出现各种棘手的麻烦。
app目录
该目录下的内容大概能与上文对apk的解压包中各文件对应上。
manifests目录下的AndroidManifest.xml对应apk中的二进制AndroidManifest.xml。
java目录下分别三个,都是相同的包名路径,其中后缀(androidTest)路径下是可以在Android系统模拟器上运行的测试程序代码,后缀(test)路径下是单纯Kotlin环境下运行的测试程序代码,没有后缀的则是正常应用程序的逻辑代码。
java(generate)目录下则是AndroidStudio在编译上边java目录中的源代码时所产生的编译文件,一般开发者不需要手动修改。
res目录下与apk中的res文件夹对应一致,存放应用程序中所用到的资源文件。
res(generate)目录同样是AndroidStudio在编译上边res目录中的资源文件时所产生的二进制文件,包括上文apk中的resources.arsc等信息都是在该目录下生成的。
GradleScript目录
gradle插件的语法规则可以参考gradle官网教程,一般开发中使用AndroidStudio创建项目后固定的模板内容也足够了。该目录下主要有两种类型的文件,.gradle 文件是gradle插件在编译项目时用到的配置信息,.pro/.prperties 是AndroidStudio加载gradle插件或其他sdk的配置文件。注意:该目录下的任何文件编辑修改后,在AndroidStudio中都要Sync一次,才能继续后面的代码编辑。
build.gradle(Project)文件配置了项目中使用的外部第三方包仓库,包括google(),maven(),jcenter()等,另外全局脚本指令或使用的自定义gradle配置文件也可以在该文件中声明。
build.gradle(Module)文件是属于上边名为app的module下的,该文件可以配置app内部需要用到的参数信息,包括module的版本信息等。所以该文件也是开发过程中改动比较频繁的配置文件。
setting.gradle文件主要保存该项目中用到的各module名称及项目自身名称信息。
gradle-wrapper.properties文件配置了当前AndroidStudio所使用的gradle插件版本等信息。
proguard-rules.pro文件用来配置项目编译时的混淆规则。说到混淆,是在源码编译生成apk安装包时,将源码中的类名、变量名、方法名、参数名等易懂长字符串,简化为26个英文字母和数字表示。这样一方面缩减了apk中class.dex文件的大小,另一方面增加apk逆向的难度。而指定哪些类可以混淆,哪些变量不可以混淆,这些规则就是在该文件中配置的。当然该文件配置之后,需要在上边对应的module模块配置文件build.gradle(Module)中配置引用,指向该文件。
gradle.properties文件是配置AndroidStudio中使用gradle插件的配置信息,比如优化gradle的编译速度,设置编译过程使用的内存限制等信息。
local.properties文件则是配置AndroidStudio使用的AndroidSdk路径,或者JNI项目的话也会配置AndroidNdk路径。
至此,Android应用程序开发中需要用到的基本总结完毕,下一篇开始将介绍应用程序界面相关内容。
Android系统编程入门系列之应用环境及开发环境介绍的更多相关文章
- Android系统编程入门系列之加载界面Activity
上回说到应用初始化加载及其生命周期,在Android系统调用Applicaiton.onCreate()之后,继续创建并加载清单文件中注册的首个界面即主Activity,也可称之为入口界面.主Acti ...
- Android系统编程入门系列之应用内键值对数据的简单保存
在应用程序间及与用户的通信交互过程中,会产生并传递一系列数据.针对这些数据,有部分是只在应用程序中使用的缓存数据,还有一部分是在不同位置多次或长时间使用的持久化数据. 对于缓存数据来说,通常以代码中定 ...
- Android系统编程入门系列之硬件交互——多媒体摄像头
多媒体系列硬件 多媒体包括图片.动画.音频.视频,这些多媒体素材的采集(输入)主要依靠摄像头和麦克风等硬件设备转化为基础数据,而他们的播放渲染(输出),则需要依靠具有相关功能的编解码软件.当然随着硬件 ...
- Android系统编程入门系列之界面Activity绘制展示
上篇文章介绍了界面Activity的启动方式和生命周期,本篇将继续介绍在界面Activity中的内容是如何绘制展示给用户的. 在Android系统上运行新创建的界面Activtiy,给用户展示的是空白 ...
- Android系统编程入门系列之界面Activity交互响应
在上篇文章中已经了解到界面Activity的绘制完全依赖其加载的视图组件View,不仅如此,用户的每次触摸操作都可以在界面Activity内接收并响应,也可以直接传递给其中的某个视图View响应.本文 ...
- Android系统编程入门系列之界面Activity响应丝滑的传统动画
上篇文章介绍了应用程序内对用户操作响应的相关方法位置,简单的响应逻辑可以是从一个界面Activity跳转到另一个界面Activity,也可以是某些视图View的相对变化.然而不管是启动一个界面执行新界 ...
- Android系统编程入门系列之界面Activity响应多元的属性动画
在响应丝滑动画一篇文章中,分别介绍了作用于普通视图.绘制视图的绘制对象.和界面这三种对象的动画效果,但是都有一些使用的局限性.比如这些动画都只是以屏幕上绘制更新的方式绘制动画,并没有真实改变作用对象的 ...
- Android系统编程入门系列之加载服务Service
之前几篇文章简单梳理了在Android系统的四大组件之一,最主要的界面Activity中,使应用程序与用户进行交互响应的相关知识点,那对于应用程序中不需要与用户交互的逻辑,又要用到哪些内容呢?本文开始 ...
- Android系统编程入门系列之服务Service齐头并进多线程任务
在上篇文章中初步了解了Android系统的四大组件之一的服务Service,在服务内可以执行无用户交互的耗时操作任务,但是包括之前关于界面系列文章在内,生命周期方法都是在主线程内被系统回调的.如果直接 ...
随机推荐
- ArrayList初步使用
️Practice the usage of ArrayList all of String with a exampe of NoteBook. ArrayList all of String的部分 ...
- CCNA 第三章 TCP/IP简介
1:DoD模型和OSI模型 2:TCP和UDP的重要特性 3:IP编址: (1):A类地址: 第一字节第一位必须为0,即:0xxxxxxx,取值范围:00000000-011111111:0-127, ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(6.B)- FlexSPI NOR连接方式大全(RT500)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT500的FlexSPI NOR启动的连接方式. 这个i.MXRT FlexSPI NOR启动连接方式系列文章,痞子衡 ...
- [项目] 淘淘商城 Part.1
电商 市场 2013:79万笔/分钟 2014:13.4万亿,双11支付宝交易峰值285万笔/分钟 2015:50万亿 技术特点 一个Tomcat:500并发 分布式:上万并发 高并发.集群.负载均衡 ...
- 磁盘IO过高时的处理办法 针对系统中磁盘IO负载过高的指导性操作
磁盘IO过高时的处理办法 针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参 ...
- traceroute排查网络故障 www.qq.com排查网络故障网络不通 先ping自己
网络不通 先ping自己 在ping网关 再ping外网 再ping别人的ip 背景需求 Linux 因为其强大的网络处理能力,被广泛用于网关(实例链接)和服务器(实例链接).实际工作中,快速排查这些 ...
- Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。
Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...
- Ansible_主机变量和主机组变量的演示
一.主机变量和主机组变量的演示 1.主机变量和主机组变量的基本语法和规则 请访问:https://www.cnblogs.com/itwangqiang/p/13592362.html 2.首先在/e ...
- DES加密 超详解 及 C++编程实现
参考资料: 1.计算机与软件学院实验报告管理系统资料 2.强烈推荐观看:<信息安全技术>课程微课设计 简介 什么是DES DES全称为Data Encryption Standard,即数 ...
- 003.Python数据类型转换
一 自动类型转换 (针对于Number类型) bool float int complex 当Number不同的数据类型进行运算的时候,默认向更高精度转化 精度从低到高顺序:bool -> in ...