APK的结构、Dalvik和Smali笔记

APK的结构

assets文件夹

  1. 作用:资源目录
  2. 编译是会产生索引文件

lib文件夹

  1. 作用:存放so库,又NDK编译得到的,常用使用游戏引擎JNI native调用工程中。
  2. so库:??
  3. JNI native调用工程:??

res文件夹:

  1. 作用:资源目录

META-INF文件夹

  1. 作用:存放工程的一些属性文件,如Manifest.MF
  2. ??

AndroidManifest.xml

  1. 作用:Android(安卓)工程的基础配置属性文件
  2. ??

classes.dex

  1. 作用:Java编译的得到Dalvik VM能直接执行的文件

resources.arsc

  1. 作用:res目录下资源的一个索引文件,保留了strings.xml文件内容

Dalvik字节码

  1. 含义:是google为Android(安卓)操作系统开发的一个已深度优化的虚拟机
  2. 特点:该虚拟机的执行的文件的格式为.dex
  3. 注:该字节码需要通过工具apkTool和Dex2.jar才能看到底层代码

 Smali

含义:.dex的文件的汇编器或反汇报器,实现了.dex格式文件的功能

原始类型

B---byte 字节,计算机存储容量单位

C---char 定义字符型表变量

D---double 双精度浮点型

F---float 单精度浮点型

I---int 整数型

J---long 长整型

S---short 段整型

V---void 无类型

Z---boolean 布尔型

[XXX---array 数组

Lxxx/yyy---object 对象,类

例子解释1

[I 定义整数型数组

[F 定义浮点型数组

定义object对象()格式:
LpackageName/objectName;【packageName:包名称;objectName对象名字】

  1. Ljava/lang/String java.lang包中的String【字符串】对象

smali中引用类:
$

  1.  LpackageName/objectName$subObjectName;【packageName:包名称、objectName对象名字、sub:替换】

例子解释2

1. hello()V

代表:void hello()

2. hello(III)Z

代表:boolean hello(int,int,int)

3. hello (Z[I[ILjava/lang/String;J)Ljava/lang/String;

代表:String hello (boolena int[] int[] Strint long)

Smali的基本语法

.field private isFlag:z 定义变量

.method 放大

.parameter 方法参数

.prologue 方法开始

.line 123 此方法位于123行

invoke-super 调用父函数

const/high16 v0,0x7fo3 把0x7fo3 赋值给v0

invoke-direct 调用函数

return-void 返回结果void

.end method 函数结束

new-instance 创建实例

iput-object 对象赋值

iget-object 调用对象

invoke-static 调用静态函数

条件跳转分支

  1. "if-eq vA, vB, :cond_**" 如果vA等于vB则跳转到:cond_**
  2. "if-ne vA, vB, :cond_**" 如果vA不等于vB则跳转到:cond_**
  3. "if-It vA, vB, :cond_**" 如果vA小于vB则跳转到:cond_**
  4. "if-ge vA, vB, :cond_**" 如果vA大于等于vB则跳转到:cond_**
  5. "if-gt vA, vB, :cond_**" 如果vA大于vB则跳转到:cond_**
  6. "if-le vA, vB, :cond_**" 如果vA小于等于vB则跳转到:cond_**
  7. "if-nqz vA, :cond_**" 如果vA等于0则跳转到:cond_**
  8. "if-nez vA, :cond_**" 如果vA不等于0则跳转到:cond_**
  9. "if-Itz vA, :cond_**" 如果vA小于0则跳转到:cond_**
  10. "if-gez vA, :cond_**" 如果vA大于等于0则跳转到:cond_**
  11. "if-gtz vA, vB, :cond_**" 如果vA大于0则跳转到:cond_**
  12. "if-lez vA, vB, :cond_**" 如果vA小于等于0则跳转到:cond_*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值