吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1763|回复: 13
收起左侧

[Android 原创] 从android开发到运行

  [复制链接]
wangxiaobai123 发表于 2024-7-2 18:15

从android开发到运行[第二天/时长:3h]

今天准备把昨天的内容实践一下,就先自己写了个超级简单的程序示例(第一次写安卓程序感觉好像Qt开发,尤其是目录结构,不同的是多了个AndroidManifest.xml文件)

使用身份证的类比,AndroidManifest.xml 文件的重要性和作用更容易理解:它不仅定义了应用程序的身份和特征,还决定了应用程序在 Android 系统中的运行方式和访问权限。管理好这个文件,就像管理好自己的身份证一样,能够确保应用程序在 Android 平台上的正常运行和合规使用。

当用户输入错误密码则弹出提示。

image-20240702171617646

用户输入正确密码则跳转到另一个界面。

首先Java 编译器生成 .class 文件,可以看出是针对每个类都生成了1个.class文件,当存在嵌套类时生成多个.class。一般来说.class文件是Java程序跨平台运行的关键,它包含了编译后的字节码,JVM可以解释并执行这些字节码,从而实现Java程序的运行。

具体路径: D:\Code\app\build\intermediates\javac\debug\classes\com\droider\firstapp

image-20240702171805403

android - 如何读懂晦涩的 Class 文件|进阶必备 - 个人文章 - SegmentFault 思否

以上是16进制表示,当然我们可以用jdk自带的命令来查看具体信息如:

image-20240702163414949

详解Java的类文件结构(.class文件的结构) | 二哥的Java进阶之路 (javabetter.cn)

随后dx 工具将 .class 文件转换成 .dex 文件以便Dalvik VM执行:

image-20240702165504467

一篇文章带你搞懂 DEX 文件的结构-CSDN博客

然后ART 加载 .dex 文件,JIT 和 AOT 编译生成机器码在 CPU 上执行


然后我还在想这个机器码是类似PC上由像x86汇编语言经汇编器而来的吗?查了半天资料都是由Dalvik虚拟机或ART将其转换为对应设备架构的机器码执行。插个眼,回头再看


查资料过程中看到了安卓Native层。不懂概念直接GPT

安卓的Native层指的是使用C、C++等本地编程语言编写的代码,这些代码直接运行在安卓操作系统的底层。与之相对的是Java或Kotlin等高级语言编写的代码,这些代码运行在安卓应用程序框架层。

具体来说,安卓的软件堆栈可以分为以下几个层次:

  1. 应用层(Application Layer): 这一层包括用户直接与之交互的应用程序,通常使用Java或Kotlin编写。这些应用程序通过Android框架提供的API与系统和硬件进行交互。

  2. 框架层(Framework Layer): 安卓框架提供了许多高级API和服务,供应用程序使用。这些框架层的代码大部分是使用Java编写的,例如活动管理、视图系统、通知管理等。

  3. Native层(Native Layer): Native层是直接运行在操作系统上的底层代码,通常使用C、C++等编程语言编写。这些代码能够直接访问设备的硬件资源和系统服务,提供了更高效和更接近硬件的访问能力。

安卓Native层的主要组成部分包括:

  • 系统运行库(System Libraries): 包括C库、图形库(如OpenGL ES)、多媒体库等,提供了底层的系统功能和服务。

  • 硬件抽象层(Hardware Abstraction Layer, HAL): 提供了与设备硬件交互的接口,允许上层软件通过标准API访问设备硬件,例如摄像头、传感器等。

  • 驱动程序(Drivers): 这些是硬件设备的实际驱动程序,用于控制设备和处理设备级别的输入输出操作。

安卓Native层的优势在于能够提供更高的性能、更直接的硬件访问能力,适合需要处理复杂计算或与底层硬件交互的应用程序功能。

个人感觉也就是个上层到底层交互的中间件。这个库中的的文件大多是.so文件形式。

什么是.so文件?.so文件与ELF关系?不多解释,直接类比PC:

特性 Windows(PE格式) Linux/Unix(ELF格式)
文件格式 PE(Portable Executable) ELF(Executable and Linkable Format)
可执行文件 .exe 无特定扩展名的可执行文件
动态链接库 .dll .so(Shared Object)
静态链接库 .lib .a(Archive)
预处理文件 .i(C预处理文件) .i(C预处理文件)
编译输出文件 .obj(目标文件) .o(目标文件)
调试信息文件 .pdb(Program Database) .dbg(调试符号文件)
符号表文件 .sym .symtab
资源文件 .res(资源文件) .rc(资源文件)

.so文件中的机器码是从ARM汇编代码编译而来的,这些机器码针对ARM架构,而安卓系统主要运行在arm架构上。


今日总结

还是扫盲学习,学习了安卓基本开发方式和运行流程。主要时间耗费在了工具使用(吐槽难用的图床)。围绕着android程序从开发到运行,我觉得其中任意一个环节都有逆向的可能。.class可以反编译成java源代码,而.dex可以相对应对于.class。而smali可以修改.dex进而破解,如果更进一步是否也可以在.so文件上做手脚,比如修改arm汇编代码进行程序流程的跳转,类似PC中的hook dll文件那样,劫持?啥的。就这样散会!!!

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
junjia215 + 1 + 1 用心讨论,共获提升!
axy + 1 + 1 谢谢@Thanks!
aliProMax1 + 1 + 1 用心讨论,共获提升!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

正己 发表于 2024-7-2 21:50
图床试试这个,另外学习思路可以参考一下我的系列课程
ShareX 全功能截图 v16.1.0 便携版 | 附图床配置,发帖再也不怕找不到图床了
https://www.52pojie.cn/thread-1925145-1-1.html
(出处: 吾爱破解论坛)
zhurainyk 发表于 2024-7-2 23:15
天心阁主 发表于 2024-7-3 02:29
zhangting2022 发表于 2024-7-3 05:24
感谢感谢分享
timelessxp 发表于 2024-7-3 09:42
感谢楼主的分享
debug_cat 发表于 2024-7-3 10:23
感谢分享,学习就是应该这样多写笔记。
dfg63678 发表于 2024-7-3 11:52
谢谢楼主分享
qgg9527 发表于 2024-7-3 17:02
希望继续更新,一直想学
666888tzq 发表于 2024-7-3 21:51
图都挂了,啥也看不到啊。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表