作为移动端操作系统,目前最新的Android 11.0已经发展的比较完善了,现在也到了系统的整理一番的时间,接下来的系列文章将以Android开发者为中心,争取用归纳总结的态度对初级入门者所应掌握的基础知识聊以标记。

应用环境

优惠券平台 https://m.cqfenfa.com/

    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系统编程入门系列之应用环境及开发环境介绍相关推荐

  1. eslint vscode 自动格式化_Vue 入门系列第二期,开发环境与 ESLint 配置

    引言 开发 Vue 项目前,做好开发环境的相关配置非常重要,它可以提高我们的开发效率. 在「Vue 入门系列」第一期,新手快速入门指南,初识 Vue 一期中,我们利用 Vue CLI 搭建了项目骨架, ...

  2. Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建

    1. Linux Mint由Linux Mint Team团队于2006年开始发行,是一份基于Debian和Ubuntu的Linux发行版.其目标是提供一种更完整的即刻可用体验,这包括提供浏览器插件. ...

  3. 《Android游戏编程入门经典》——1.1节Android 4简介

    本节书摘来自异步社区<Android游戏编程入门经典>一书中的第1章,第1.1节Android 4简介,作者[美]Jonathan S. Harbour,更多章节内容可以访问云栖社区&qu ...

  4. Android传感器编程入门(三)

    上接<Android传感器编程入门(二)> 三.实例:窈窈录音器 通过上面的例子我们学会了如何获得某种类型的传感器,下面我通过一个实例来学会如何使用某一个类型的传感器.我们这里使用加速度传 ...

  5. 免费分享:5本安卓开发经典书籍,Android 7编程入门经典(第4版),Android底层驱动分析和移植,底层驱动分析和移植

    1.Android 7编程入门经典(第4版) 使用Android Studio 2  PDF 下载 下载地址: http://www.askwinds.com/r-c/down-info-02/579 ...

  6. C++编程入门系列之十四(类与对象:构造函数和析构函数)

    C++编程入门系列之十四(类与对象:构造函数和析构函数) 鸡啄米上一节中给大家讲解了类的声明.成员的访问控制和对象,今天鸡啄米给大家讲C++编程入门时同样必须掌握的构造函数和析构函数.从上一讲开始已经 ...

  7. Python编程入门系列课程

    原文:https://mc.dfrobot.com.cn/thread-309195-1-1.html Python编程入门系列课程--教程目录: Python编程入门系列课程--01 智能绘星 Py ...

  8. Android 4编程入门经典—开发智能手机与平板电脑应用

    Android 4编程入门经典 书名: Android 4编程入门经典 原书名: Beginning  Android 4 Application Development 重点指数 畅销书 作者: ( ...

  9. 《Android游戏编程入门经典》——1.7节小结

    本节书摘来自异步社区<Android游戏编程入门经典>一书中的第1章,第1.7节小结,作者[美]Jonathan S. Harbour,更多章节内容可以访问云栖社区"异步社区&q ...

  10. zookeeper编程入门系列之zookeeper实现分布式进程监控和分布式共享锁(图文详解)...

    本博文的主要内容有 一.zookeeper编程入门系列之利用zookeeper的临时节点的特性来监控程序是否还在运行   二.zookeeper编程入门系列之zookeeper实现分布式进程监控 三. ...

最新文章

  1. SQL 语句使用to_char函数时,检索结果有空格
  2. 自定义ArcGIS JavaScript 工具条样式
  3. oracle 三个口令管理,Oracle学习笔记(12)口令和资源管理
  4. mysql的命令行安装,忘记密码,密码重置问题
  5. 面对大数据,我们应该干的事~大话开篇
  6. 快速进行项目交付,实现商业价值的捷径
  7. 13. Use Objects to manage resources.
  8. oracle ora27072,ORA-27072: skgfdisp
  9. git覆盖覆盖推送_强制“git Push”覆盖远程文件
  10. python给批量图片添加文字 脚本_Python实现图片添加文字
  11. python易忘 自用小甲鱼笔记
  12. php 解析lrc文件格式,音乐播放器之LRC歌词解析
  13. 吃什么食物对眼睛最好
  14. 6-vulnhub靶场-LordOfTheRoot_1.0.1靶机内核提权udf提权缓冲区溢出提权
  15. 从虚拟化前端Bug学习分析Kernel Dump
  16. python——文档字符串
  17. POJ3376 Finding Palindromes
  18. pip 怎么都升级不成功?如何解决
  19. 常用技术指标之一文读懂KDJ指标
  20. linux记录端口访问日志,Linux日志管理

热门文章

  1. 大学电子竞赛及项目~总贴
  2. 摩尔斯电码 — 摩尔斯密码
  3. 重学java——倒叙遍历
  4. Luogu P1725 琪露诺
  5. 读取四则运算的字符串(Formula)返回计算结果 c#
  6. arcgis for js4.x自定义图例位置添加到地图并导出
  7. 疯狂夹娃娃机源码+教程
  8. 计算机专业—毕业设计题目大全
  9. Android 绘制简单的折线图
  10. 索尼a6000拍月亮_如何给月亮拍好照片