今天准备把昨天的内容实践一下,就先自己写了个超级简单的程序示例(第一次写安卓程序感觉好像Qt开发,尤其是目录结构,不同的是多了个AndroidManifest.xml文件)
使用身份证的类比,AndroidManifest.xml 文件的重要性和作用更容易理解:它不仅定义了应用程序的身份和特征,还决定了应用程序在 Android 系统中的运行方式和访问权限。管理好这个文件,就像管理好自己的身份证一样,能够确保应用程序在 Android 平台上的正常运行和合规使用。
当用户输入错误密码则弹出提示。
用户输入正确密码则跳转到另一个界面。
首先Java 编译器生成 .class 文件,可以看出是针对每个类都生成了1个.class文件,当存在嵌套类时生成多个.class。一般来说.class文件是Java程序跨平台运行的关键,它包含了编译后的字节码,JVM可以解释并执行这些字节码,从而实现Java程序的运行。
具体路径: D:\Code\app\build\intermediates\javac\debug\classes\com\droider\firstapp
android - 如何读懂晦涩的 Class 文件|进阶必备 - 个人文章 - SegmentFault 思否
以上是16进制表示,当然我们可以用jdk自带的命令来查看具体信息如:
详解Java的类文件结构(.class文件的结构) | 二哥的Java进阶之路 (javabetter.cn)
随后dx 工具将 .class 文件转换成 .dex 文件以便Dalvik VM执行:
一篇文章带你搞懂 DEX 文件的结构-CSDN博客
然后ART 加载 .dex 文件,JIT 和 AOT 编译生成机器码在 CPU 上执行
然后我还在想这个机器码是类似PC上由像x86汇编语言经汇编器而来的吗?查了半天资料都是由Dalvik虚拟机或ART将其转换为对应设备架构的机器码执行。插个眼,回头再看
查资料过程中看到了安卓Native层。不懂概念直接GPT
安卓的Native层指的是使用C、C++等本地编程语言编写的代码,这些代码直接运行在安卓操作系统的底层。与之相对的是Java或Kotlin等高级语言编写的代码,这些代码运行在安卓应用程序框架层。
具体来说,安卓的软件堆栈可以分为以下几个层次:
[ol]
应用层(Application Layer): 这一层包括用户直接与之交互的应用程序,通常使用Java或Kotlin编写。这些应用程序通过Android框架提供的API与系统和硬件进行交互。
框架层(Framework Layer): 安卓框架提供了许多高级API和服务,供应用程序使用。这些框架层的代码大部分是使用Java编写的,例如活动管理、视图系统、通知管理等。
Native层(Native Layer): Native层是直接运行在操作系统上的底层代码,通常使用C、C++等编程语言编写。这些代码能够直接访问设备的硬件资源和系统服务,提供了更高效和更接近硬件的访问能力。
[/ol]
安卓Native层的主要组成部分包括:
系统运行库(System Libraries): 包括C库、图形库(如OpenGL ES)、多媒体库等,提供了底层的系统功能和服务。
硬件抽象层(Hardware Abstraction Layer, HAL): 提供了与设备硬件交互的接口,允许上层软件通过标准API访问设备硬件,例如摄像头、传感器等。
驱动程序(Drivers): 这些是硬件设备的实际驱动程序,用于控制设备和处理设备级别的输入输出操作。
安卓Native层的优势在于能够提供更高的性能、更直接的硬件访问能力,适合需要处理复杂计算或与底层硬件交互的应用程序功能。
个人感觉也就是个上层到底层交互的中间件。这个库中的的文件大多是.so文件形式。
什么是.so文件?.so文件与ELF关系?不多解释,直接类比PC:
[table]
[tr]
[td]特性[/td]
[td]Windows(PE格式)[/td]
[td]Linux/Unix(ELF格式)[/td]
[/tr]
[tr]
[td]文件格式