一、环境安装与配置:
// 没有技术要求,随便找一个安装视频按着步骤操作即可。
// jdk 安装
(B站大学安装教程)
// IDEA 安装
(B站大学安装教程)
// androidstudio 安装
(B站大学)
// jadx 安装
(B站大学安装教程)
// jeb 安装
(B站大学安装教程)
// 雷电模拟器官网 | Magisk Delta(apk) | LSPosed(apk) 安装
(B站大学安装教程)
二、adb介绍:
adb作用:pc端操作手机要用到它。
adb工作原理:
在电脑中cmd命令行操作adb的客户端和电脑中的adb服务端交互,然后电脑中的adb的服务端和手机的daemon进程进行交互。然后在返回给电脑中的服务端,电脑中的服务端再返回给电脑中的客户端。cmd显示结果。
adb常用命令:
adb help // 帮助信息,查看adb所支持的所有命令
adb --version // 显示 adb 版本
adb start-server // 杀掉后重启
adb kill-server // 杀死当前adb服务,如果连不上设备时,杀掉重启。(没事不要用它)
adb devices // 查看当前连接的设备,已连接的设备会显示出来
adb -p 6666 start-server // 任意指定一个 adb shell 的端口(5037:adb默认端口,如果该端口被占用,可以指定一个端口号)
adb shell pm list packages // 列出当前设备/手机,所有的包名
adb shell pm list packages -f // 显示包和包相关联的文件(安装路径)
adb install <文件路径\apk> // 将本地的apk软件安装到设备(手机)上
adb install -r <文件路径\apk> // 覆盖安装
adb uninstall <包名> // 卸载该软件/app
// 注意:安装时安装的是apk,卸载时是包名,可以通过 adb shell pm list packages 查看需要卸载的包名
adb push <本地路径\文件或文件夹> <手机端路径> // 把本地(pc机)的文件或文件夹复制到设备(手机).
adb pull <手机端路径> <本地路径\文件或文件夹> // 把设备(手机)的文件或文件夹拉取出来本地(pc机)
// 注意:pc机路径与Android机路径,分隔符是不同的。
adb shell // 登录设备 shell,该命令将登录设备的shell(内核),登录shell后,可以使用 cd,ls,rm 等Linux命令
adb -s 设备名 shell // 当电脑插多台手机或模拟器时,指定一个设备号进行连接
adb get-serialno // 也可以查看设备号
三、logcat介绍:
logcat日志:
adb logcat -help
adb logcat 常规日志显示
adb logcat -c 清除日志
adb logcat -s tag关键字
adb shell
ps -A|grep 包名 获取pid进程
adb logcat |findstr 进程pid // window系统下用findstr 安卓系统下用grep
四、apk文件结构:
1. AndroidManifest.xml文件(关键核心):
AndroidManifest.xml文件是每个Android应用不可或缺的配置文件,它包含了应用的关键信息。我们可以把它看作是应用的“蓝图”或“说明书”,它向系统声明了应用的基本属性、组件以及权限等。AndroidManifest.xml中包括以下重要部分:
1. 应用的包名(package):每个Android应用都有一个唯一的包名,通过包名来区分不同的应用。
2. 应用的组件(Activities, Services, Broadcast Receivers, Content Providers):声明应用包含哪些组件,以及这些组件的属性和功能。
3. 权限声明:列出应用所需的权限,如访问网络、读取存储、使用相机等。
4. 应用主题和图标:定义应用的UI样式、图标等。
5. 最小SDK版本和目标SDK版本:确定应用能在什么版本的Android系统上运行
详细解析Manifest中的关键字段:
<manifest>:包含整个应用的包信息及权限定义。
package: 定义了应用的包名,通常为反向域名格式,如com.example.app。
android:versionCode: 定义应用的版本号。
android:versionName: 定义应用的版本名称。
<application>:包含应用的核心配置,如主题、图标等。
android:icon: 定义应用的图标。
android:label: 定义应用的名称。
android:theme: 应用的UI主题。
<activity>:声明应用的各个界面(Activity),以及这些Activity的属性和行为。
android:name: Activity的类名。
android:label: Activity的标签。
android:theme: Activity特有的UI主题。
<uses-permission>:声明应用所需要的权限,如访问网络、发送短信等。
<intent-filter>:定义组件的功能和响应的事件,如Activity的启动方式或Broadcast Receiver接收的广播类型。
2. assets文件:
目录包含了应用程序的原始资源文件,这些资源不经过编译,直接以原始形式存储。通常,开发者可以在该目录中存放字体文件、音频文件、HTML文件等,应用在运行时通过API来读取这些资源。例如,游戏可能会将所有的地图文件或纹理图像存放在此目录中。通过AssetManager API,应用可以访问这些文件。
3. res文件:
目录包含了Android应用所需的所有资源文件。与 assets/ 目录不同,res/ 目录中的资源文件是经过编译的,按照不同类型的资源进行组织,例如:
drawable/:存放图像资源(如PNG、JPEG等格式的图片)。
layout/:存放XML格式的布局文件,定义界面的结构。
values/:存放各种配置文件,定义应用的常量、颜色、字符串等资源。例如:
strings.xml:存储应用的文本字符串。
colors.xml:存储应用使用的颜色资源。
styles.xml:存储样式资源。
在values/目录下,除了strings.xml、colors.xml等常见资源文件,还会有像dimens.xml(尺寸定义文件)和attrs.xml(自定义属性)等资源文件。
4. lib文件:
目录包含了本地库文件,通常是通过 JNI(Java Native Interface) 与C/C++编写的本地代码。这些库文件可以针对不同的硬件架构(如arm、x86等)进行编译,因此lib/目录下通常会为每个架构创建相应的子目录。这个目录中存放的本地库可以通过Java代码调用JNI接口实现与系统底层的交互。
├─arm64-v8a
│ libcyberpeace.so
│
├─armeabi-v7a
│ libcyberpeace.so
│
├─x86
│ libcyberpeace.so
│
└─x86_64
libcyberpeace.so
5. META-INF文件:
目录与Java的JAR文件类似,用于存放APK文件的元数据,如签名文件、校验信息等。此目录主要包括以下文件:
MANIFEST.MF:存放APK的清单文件,包含关于APK文件本身的信息。
CERT.RSA:包含APK文件的数字签名。
CERT.SF:存放APK文件的签名摘要。
6. classes.dex文件:
这是Android中的可执行文件。所有安卓代码集中在此文件。一个app可以有多个dex。因为一个dex文件最多可以放65535个方法。可以通过反编译工具dex2jar转为jar包再通过jd-gui查看其代码
7. resources.arsc文件:
文件包含了应用程序的所有编译后的资源映射信息。这个文件并不存储实际的资源内容(如图片或字符串),而是存储资源与资源ID的映射关系。例如,它会保存应用中的字符串、颜色、尺寸、样式等信息以及这些资源的ID。通过这个文件,Android系统能够在应用运行时快速访问和加载所需的资源。
五、apk打包流程:
使用 AAPT 工具打包资源文件 , 生成 R.java , resources.ap 文件 ;
使用 AIDL tool 工具 , 处理 AIDL 文件 , 生成对应的 Java 文件 ;
使用 javac 工具编译 Java 源码为 class 字节码文件 ;
使用 dx 工具将 class 字节码文件打包成 dex 字节码文件 , 这是 Dalvik 虚拟机字节码文件 ;
使用 apkbuilder 工具生成未签名的 apk 文件 ;
使用 jarsigner 工具对 apk 文件进行签名 , 生成签名后的文件 ;
使用 zipalign 工具对签名后的 apk 文件进行对齐操作 ;
六、apk的安装流程:
一、4种安装方式:
系统程序安装 ;
使用应用市场安装 ;
手机自带安装 ;
使用 adb 调试工具安装 ;
二、APK 安装流程:
① 将 APK 安装包复制到 /data/app 目录下解压 , 扫描安装包 ;
② 将 dex 文件保存 /data/dalvik-cache 目录中 ;
③ 在 /data/data/包名 下创建对应 apk 包名的应用数据目录 ;
系统自带程序在 /system/app 目录下, 获得 adb root 权限后才能删除 ;
用户安装的程序 /data/app 目录下, 安装时将apk文件复制到此目录;
/data/data/ 目录下, 存放应用程序的数据
/data/dalvik-cache 目录下, 将 apk中的 dex 文件保存 /data/dalvik-cache 目录中
三、应用卸载:
就是将 /data/app/ , /data/dalvik-cache/ , /data/data/ 等目录下的相关文件删除 ;