安卓开发基础一

发布时间 2023-08-03 16:30:04作者: 字母一哥

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()