1. Dalvik 虚拟机1.1 Dalvik 虚拟机概述Dalvik 虚拟机 (Dalvik Virtual Machine ), 简称 Dalvik VM 或者 DVM。DVM 是 Google专门为Android平台开发的虚拟机,它运行在Android运行时库中。每一个应用程序对应有一个单独的Dalvik虚拟机实例。
DVM 作为 Android 平台至关重要的中间件,它的输入是经过dx工具打包好的Dex文件,输出是程序执行结果。dx 工具解析 .class文件,合并多个 .class文件,转换为基于寄存器的字节码,并优化字节码,最终生成 Dex文件。
DVM 在 API 上和 J...
Activity启动模式:1.默认启动模式standard: 该模式可以被设定,不在manifest设定时候,Activity的默认模式就是standard。在该模式下,启动的Activity会依照启动顺序被依次压入Task中:
2.栈顶复用模式singleTop: 在该模式下,如果栈顶Activity为我们要新建的Activity(目标Activity),那么就不会重复创建新的Activity。
例:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495...
Smali是什么Smali是Android虚拟机的反汇编语言。Android虚拟机的可执行文件并不是普通的class文件,而是再重新整合打包后生成的dex文件。dex文件反编译之后就是Smali代码,所以说,Smali语言是Android虚拟机的反汇编语言。动态调试APK,通常静态分析APK是不够的,如果需要彻底分析APK的执行逻辑,需要通过动态调试来进行。修改APK运行逻辑,通过修改Smali代码,再重新编译打包成新的APK,是Android逆向的基本操作。Smali基本语法
数据类型
Smali(方法类型)
代码
Java
备注
V
return-void
void
只能用...
布局格式线性布局LinearLayout线性布局(LinearLayout)主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能方一个控件。
使用线性布局,需要将布局节点改成LinearLayout,基本格式如下:
1234567891011 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.androi...
AndroidKillerAndroidKiller是一可视化的Android反编译工具,集合了多款安卓反编译软件,只要有配置jdk环境,AndroidKiller的安装十分常规
使用基础页面
在左侧,工程信息位置,展示名称、包名、入口;右侧日志输出,展示
更改apk的安装包名下好一个apk安装包,这里选用土豆视频为例子
打开AndroidKiller.exe程序,把下好的apk包拉入程序中,程序会自动编译apk,中途出现分析工程提示不用管直接点击否,编译的结果如下
![屏幕截图 174312](./assets/屏幕截图 174312-1725985509168-4...
apk文件结构APK 文件APK (Android application package) ,是应用程序的压缩包形式,将应用程序的原代码、各类资源和清单信息组合在一起,以便在设备上进行安装和运行
接下以ibilibili安装包为例观察其文件结构
下载apk文件
因为其本质上就是一个 zip压缩包。所以直接用win解压解压文件
如图,文件内部可分为
静态资源文件(assets)
库文件(lib)
签名文件(META-INF)
编译资源文件(res)
配置清单文件(AndroidManifest.xml)
核心代码文件(classes.dex)
资源映射文件(resources.ar...
HandlerHandle是一套 Android 消息传递机制,主要用于线程间通信
handler其实就是主线程在起了一个子线程,子线程运行并生成Message,Looper获取message并传递给Handler,Handler逐个获取子线程中的Message
Binder/Socket用于进程间通信
Message :代表一个行为或者一串动作 每一个消息在加入消息队列时,都有明确的目标Handler
ThreadLocal: 线程本地存储区(Thread Local Storage,简称为TLS)ThreadLocal的作用是提供线程内的局部变量TLS,这种变量在线程的生...
sd卡的读写操作HttpURLConnectionHttpURLConnection是基于[http协议的,支持GET、POST、PUT、DELETE等各种请求方式。如果使用HTTPS协议请求,可以使用它的子类HttpsURLConnection完成更安全的请求操作
使用步骤
创建一个URL对象:
1URL url=new URL(“接口地址”)
调用URL对象的openConnection()来获取HttpURLConnection对象实例;
1HttpURLConnection connection= (HttpURLConnection) url.openConnection...
四大组件
活动(activity),用于表现功能
服务(service),后台运行服务,不提供界面呈现
广播接受者(Broadcast Receive),勇于接收广播
内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库
活动定义:是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示
一个Activity通常就是一个单独的屏幕
可以类比为windows开发中的窗口
使用1234567public class FirstActivity exte...