1 安卓开发环境搭建
1.1 安卓开发环境介绍
# 做安卓开发,首先要会java
-需要安装 安卓SDK+集成开发环境eclipse ---》早些年
-安装SDK依赖于java的sdk---》安装jdk,已经安装过了
-后来,谷歌公司购买了jebrains的编辑器版权(IDEA,Pycharm...)---->做出了AndroidStudio编辑器,专门用来开发安卓应用的---》免费的
-安装了AndroidStudio----》让你必须下载安装SDK,才能开发项目
# 编写了一个app,运行app
-使用AS自带的虚拟机(安卓虚拟机)
-使用第三方安卓虚拟机(夜神,网易mumu)
-真机(谷歌手机)---》建议大家使用真机测试----》不需要root,必须开usb调试
# 安卓SDK是什么?
-一堆jar包,一堆用java写的第三方包,谷歌提供的,内置了很多类,很多方法,让咱们可以使用java的语法编写安卓应用
1.2 下载集成开发环境
# 官网下载:
# 历史版本下载(不建议用了)
https://developer.android.google.cn/studio/archive?hl=zh-cn
#最新版本下载(咱们用最新,最稳定)
https://developer.android.google.cn/studio
# 下载最新稳定版
android-studio-2022.2.1.20.exe
1.3 安装 AndroidStudio
# 一路下一步,选择安装虚拟机(可以不安装),选择安装路径,确定安装即可
# 安装完成,启动即可
1.4 AndroidStudio配置(耗时)
1.5 配置环境变量
# 我的安装sdk装在了 d:sdk 文件夹下
# 面临问题
-我们之前装过 platform-tools,有点老:D:\soft\platform-tools
-现在有有一个,这个是最新的:D:\sdk\platform-tools
-以后敲adb 用的是谁,取决于环境变量了,谁在上面,用的就是谁,两个都可以用
# 不配置也可以的
1.6 创建虚拟机(网易mumu,真机,安卓虚拟机)
# 开发完的项目, 运行
-真机(推荐),不是谷歌所有型号手机都有
-第三方模拟器:网易mumu,夜神
-AndroidStudio提供的---》学习如何创建它的虚拟机
# 创建虚拟机可能不成功
# win系统在安装和操作之前,请提前开始电脑的vt-x,虚拟机开启方法如下:
https://mumu.163.com/include/16v1/2016/06/27/21967_625825.html
2 创建第一个安卓项目运行
2.1 安卓项目目录结构
# 项目构建工具介绍----》每个项目有自己的环境,项目的依赖都在配置文件中
# 写安卓使用Gradle构建
# 写javaEE,一般使用Maven
# python有虚拟环境,一个项目一个环境
# 当前这个项目依赖了一些第三方,下载第三方,在maven或者Gradle
Gradle和Maven都是Java项目的构建工具,但它们有一些区别:
1. 语法:Gradle使用Groovy语言进行编写,而Maven使用XML。Groovy更加灵活易读,XML更加严谨易于重用。
2. 性能:Gradle比Maven更加高效快速,因为它使用了增量构建模式,只会重新构建被更改的模块,而Maven则需要重新构建整个项目。
3. 插件:Gradle的插件生态更加丰富和现代化,而Maven的插件相对较为传统。此外,Gradle的插件可以非常容易地编写和定制,而Maven的插件相对繁琐。
4. 维护:Maven有比较成熟的工具链和文档支持,而Gradle则相对较新,可能需要更多的自学
# Groovy介绍
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码
├── .gradle #AndroidStudio 自动生成的文件,会自动修改它的,项目打包时也会删除;
├── .idea # AndroidStudio自动生成的文件,会自动修改它的,项目打包时也会删除;
├── app # 应用相关的东西都在里面,工作的核心目录
│ ├── build # 编译的产物。可以手动把它整个删掉,目前看不到,是因为没编译
│ ├── libs # 依赖包可以放这里,比如一些jar文件
│ ├── src # 代码在这。非常重要。
│ │ ├── main
│ │ │ ├── java # 放Java代码的地方
│ │ │ ├── res
│ │ │ │ ├── drawable # 应用图标
│ │ │ │ ├── layout # Android布局文件夹
│ │ │ │ ├── mipmap # 适配不同分辨率的手机
│ │ │ │ ├── mipmap # 桌面图标
│ │ │ │ └── values # 颜色、样式、字符集配置文件夹
│ │ │ ├──AndroidManifest.xml#APP运行配置文件,用来配置权限:程序入口配置、应用程序主题、应用程序组件等
│ ├── .gitignore # 版本控制
│ ├── build.gradle # 非常重要,app的构建配置。俗称“app的gradle文件”
│ └── proguard-rules.pro # 不管。这个是混淆配置。
├── gradle # 它是一个构建起配置文件
├── .gitignore # 整个工程的版本控制
├── build.gradle # 很重要。项目级的配置。俗称“项目gradle文件”
├── gradle.properties # 全局的gradle配置文件
├── gradlew # Linux/mac上执行gradle命令
├── gradlew.bat # Windows上执行gradle命令
├── local.properties # 本地配置文件,一般不上传
└── settings.gradle # gralde的项目级配置
# 以后只需要关注 main文件夹下的java和res,AndroidManifest.xml,build.gradle
2.2 安卓项目开发流程
# 以后,要创建一个个的app的页面,就是在res---》layout文件夹下创建 xx.xml
-activity_main.xml 新建项目时,创建了空页面
# 一个页面会配合一个java的类,也就是一个java文件---》MainActivity.java
-写一些逻辑,按钮点击,图片显示。。。
-发送网络请求
3 第一个安卓app(点击按钮切换美女图片)
补充
1 Hook app某些方法的时候
1.1 hook重载的方法
# 方法名一样,参数不一样----》重载
# 手机端启动server
'''
adb shell
su
cd /data/local/tmp/
./frida-server-16.0.19-android-arm64
端口转发
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
'''
###python代码
import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()
session = rdev.attach("油联合伙人")
# hook的是update这个重载方法,不写overload,会有错误提示,告诉你有几个,你想hook那个,复制过去即可
scr = """
Java.perform(function () {
// 包.类
var MessageDigest = Java.use("java.security.MessageDigest");
MessageDigest.update.overload('byte').implementation = function(data){
var res = this.update(data);
return res;
}
});
"""
script = session.create_script(scr)
def on_message(message, data):
print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
1.2 hook构造方法
# 构造方法可能有多个
# hook构造方法
import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()
session = rdev.attach("油联合伙人")
scr = """
Java.perform(function () {
// 包.类 项目中字符串拼接,都会用这个,hook它,很多地方会用到 StringBuilder sb =new StringBuilder() 触发构造方法,就好hook到
var StringBuilder = Java.use("java.lang.StringBuilder");
// hook构造方法,固定加入 .$init.overload('int')
StringBuilder.$init.overload('int').implementation = function(num){
console.log(num);
return res;
}
});
"""
script = session.create_script(scr)
def on_message(message, data):
print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
标签:app,java,安卓,基础,gradle,开发,message,虚拟机
From: https://www.cnblogs.com/pdxt666/p/17603628.html