赞
踩
本公众号分享的所有技术仅用于学习交流,如作他用所承受的法律责任一概与作者无关。如有错漏,欢迎留言交流。预计阅读全文耗时:95min
《java编程思想(第5版)》Bruce Eckel
《Android Studio开发实战从零基础到App上线(第三版)》 欧阳燊
《第一行代码Android第2版》郭霖
《ARM汇编与逆向工程 蓝狐卷基础知识》MariaMarkstedter
《安卓Frida逆向与抓包实战》陈佳林
《安卓Frida逆向与协议分析》陈佳林
《IDA Pro权威指南(第2版)》Chris Eagle
《Frida Android SO逆向深入实践》陈佳林
《unidbg逆向工程原理与实践》陈佳林
一、前置知识 ├── 为什么学习安卓逆向 └── 学习安卓逆向需要准备什么 ├── 学安卓逆向的前置知识 └── 硬件配置 二、 打造属于自己的anroid逆向环境 ├── 1. 开发环境(windows) │ ├── java 开发环境(学习Java,Android开发时候用) │ │ ├── JDK │ │ └── IDEA │ ├── Android开发环境(root、Android正向开发、编写Xposed插件的时候用) │ │ ├── Android Studio │ │ │ ├── 安装Android Studio │ │ │ └── 创建工程测试一下 │ │ └── SDK │ │ ├── SDK目录结构 │ │ ├── SDK版本管理 │ │ └── adb │ ├── C 开发环境(so层逆向的时候用,直接输出到Android Studio 的logcat上,不需要安装新的环境了) │ ├── python 开发环境(编写爬虫、Frida的时候用) │ │ ├── Python │ │ └── 安装PyCharm │ ├── Javascript 开发环境(学习js、Frida、js逆向的时候用) │ │ ├── chrome浏览器 │ │ ├── nodejs │ │ └── pycharm(专业版才支持js)+nodejs插件 │ ├── 其他工具 │ │ ├── AndroidKiller │ │ │ ├── 配置AndroidKiller │ │ │ └── 更新smali插桩插件 │ │ ├── apktool │ │ ├── Jadx │ │ ├── JEB │ │ ├── Frida安装配置(windows) │ │ │ ├── 电脑端配置 │ │ │ ├── 手机端配置 │ │ │ └── 测试 │ │ ├── IDA Pro │ │ └── 不常用 │ │ ├── Jd-Gui │ │ ├── dex2jar │ │ ├── enjarify │ │ ├── baksmali │ │ ├── dnSpy │ │ ├── Bytecode-Viewer │ │ └── 类UNIX模拟环境 ├── 2. 开发环境(mac) │ ├── 安装git、iterm2 │ ├── 安装pyenv、python、pycharm │ ├── 安装jdk、Android Studio、sdk │ ├── 安装Jadx、Apktool、jeb、IDA Pro │ └── vscode、IDEA、GoLand、DBeaver、postman、Charles、mitmproxy ├── 3. 开发环境(Linux) └── 4. 真机 ├── 刷机 │ ├── 解BL锁 │ │ ├── 小米(以红米9A为例) │ │ │ ├── 准备驱动 │ │ │ └── 解锁BL │ │ └── goole手机 │ └── 刷系统 ├── Magisk(ROOT) │ ├── magisk是什么? │ ├── 刷入Magisk面具 │ │ ├── 方式1:通过TWRP刷入Magisk │ │ └── 方式2:安装Magisk Manager再通过修补boot.img刷入Magisk │ └── Magisk模块的安装 │ ├── 救砖模块 │ └── Move Certificates ├── Xposed框架 │ ├── EdXposed │ │ ├── 安装EdXposedManager │ │ ├── 还需要安装两个Magisk模块 │ │ ├── Riru │ │ ├── EdXposed │ │ └── EdXposed重启到用户空间 │ └── LSPosed │ └── 安装LSPosed ├── 系统备份与救砖 └── MT管理器
Sign
的加密。这时候app逆向逆的是协议
(让爬虫爬到app的数据)C
语言:数据类型,指针,常见加密算法native层实现。so
类似win下的
dll`)arm32
的,未来无法调试arm64的程序,入门足够了)x86
的架构,而有些app只认v7
或者v8
架构的cpu。Win10
、linux
(kali或者ubuntu)、mac
JRE
。JDK
。JDK下载地址: https://www.oracle.com/java/technologies/downloads/#jdk18-windows
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
(注意前面是有一个点的)%JAVA_HOME%\bin
java --version
,javac
下载地址: https://www.jetbrains.com/idea/download/#section=windows
下载地址: https://developer.android.google.cn/studio/
minSdkVersion
的字段HAXM
的插件只支持Intel
的cpu,只有安装这个插件才可以运行Android Studio 自带的模拟器。该插件不支持AMD
的cpu(AMD的cpu只能使用Genymotion模拟器,首先需要安装virtualBox虚拟机,然后再安装Genymotion模拟器,有需要请自行百度)。QtScrcpy : https://gitee.com/Barryda/QtScrcpy
.downloadlntermediates
:看名字,像是下载文件时的临时目录.temp
:下载文件时的临时目录build tools
:aidl.exe
:把.aidl 接口转换成java接口dexdump.exe
(逆向调试工具) : dump devlik中间代码aapt.exe
(Android Asset Packaging Tool):编译应用程序的资源文件(包括AndroidManifest.xml和你的Activities的xml文件),生成R.java文件,这样你就可以从你的java代码中引用资源。dx.bat
(编译脚本):将.class中间代码转化为dvlik中间代码,所有经过java编译的生成.class文件都需要此工具进行转换,最后打包进apk文件中。cmake
:Android SDK 的 CMake 的默认版本是3.10.2。Cmake是用来makefile的一个工具,读入所有源文件之后,自动生成makefile。emulator
:这里存放的是一些安卓模拟器extras
:该文件下存放了Google提供的USB驱动,Intel提供的硬件加速附件工具包。(后期存放了Android Support兼容包,使用兼容包版本时最好与SDK版本保持一致)fonts
:存放一些字体文件licenses
:market_licensing作为AndroidMarket版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。ndk
:ndk(Native Development Kit,跟sdk差不多的),是它也是一个开发工具包。可以让开发者在 Android 应用中使用 C 和 C++ 代码。patcher
:增量更新,用于更新记录。platforms
data
:保存着一些系统资源,skins
:Android模拟器的皮肤,templates
:是工程创建的默认模板,android.jar
:是该版本的主要framework文件。platform-tools
:adb.exe
、sqlite3.exe
等。platforms/tools
文件夹有些重复,主要是从android2.3开始这些工具被划分为通用了。skins
:Android模拟器的皮肤source
:这个文件夹下面存放的是Android的源代码。system-images
:存放的是创建Android虚拟机时的镜像文件(已经编译好的镜像文件,模拟器可以直接加载)。从android-14
开始将模拟器镜像文件整理在这里(原来放在platforms下)tools
:ddms
:用于启动Android调试工具;logcat
:Logcat 能够记录 Android 系统日志,以及 Android 应用的日志(如崩溃报告、错误消息等)。通过使用 Logcat,开发人员可以快速了解应用程序在设备上运行时的情况,以找到并解决问题;draw9patch
:用于创建可缩放的图像文件。它的名称来源于图像的左上角和右下角有九个像素的宽带,这些像素告诉 Android 如何缩放图像以适应不同的屏幕尺寸;monkeyrunner
:是一个不错的压力测试应用,模拟用户随机按键;mksdcard
:模拟器SD映像的创建工具;emulator
:Android SDK模拟器主程序,不过从android 1.5开始,需要输入合适的参数才能启动模拟器;traceview
:可以读取 trace 文件,这些文件包含关于 Android 应用运行时间的详细信息。通过使用 TraceView,开发人员可以找到代码中的性能瓶颈,以优化应用的速度和效率。.knownPackages
:未知AVD Manager
:是Android SDK中的一个工具,用于管理模拟器配置(Android Virtual Devices,简称AVD)。SDK Manager
:Android SDK 中的 SDK Manager 是 Android 软件开发工具包(SDK)的一个组件,提供了访问开发 Android 应用所需的工具和软件包的途径。SDK Manager 允许开发者下载并安装最新的 Android SDK 组件,例如 Android 平台工具、平台和附加组件。这可以帮助开发者确保他们的开发环境使用最新的工具和 API,以构建高质量的 Android 应用。SDK Manager
管理。SDK Manager.exe
,然后替换tools,重装jdk,重新配置jdk环境变量。Android SDK Manager
,可以去下面网站下载SDK Tools
: https://www.androiddevtools.cn/
emulator
文件夹是从后面新下载的SDK的tools拆分出来的ddms.bat
、draw9patch.bat
等这些重要的工具。tools
文件夹替换自己的SDK的tools
文件夹 (作者亲测这一步不可省略,不然后面解决了环境变量,SDK Manager.exe也还是会闪退。),再尝试打开一下SDK Manager.exe
,发现还是闪退!
android-sdk-windows\tools\lib\find_java.bat
来确认 java.exe 的路径。
android-sdk-windows\tools\lib\find_java.bat
就提示找不到jdk,但环境变量是没问题的。SDK Manager.exe
可以运行成功了,ddms
也没问题
Adb(android debug bridge):android调试桥是一个用于管理 android 终端(或者模拟器)状态的工具。
platform-tools
目录下包含通用工具,比如adb
、和aapt、aidl、dx等文件SDK
目录下的platform-tools
文件夹的路径添加到系统变量Path
中去
adb
,验证环境变量是否设置成功
VID
和PID
.android
,在该文件夹下找到文件adb_usb.ini
,如果找不到可以新建一个,在adb_usb.ini
文件里添加设备的VID
和PID
adb kill-server|adb start-server|adb devices
重启adb1.0.31
或者1.0.32
的版本,当连接android6.0版本之后的手机经常会出现adb命令不通情况。1.0.36
及其以后的版本。adb.exe
、AdbWinApi.dll
、AdbWinUsbApi.dll
三个文件,执行adb start-server
USB用于传输文件
,adb devices一下就发现设备了需要usb数据线连接手机进入adb shell
);C:\Users\cisco>adb devices List of devices attached KBVO8******S8TYT device 0bb39******9dcc8 device # 注意: 如果有多个手机连接在电脑上,需要用 -s "serial_number" 参数指定目标手机 # 设置手机监听端口 5555 上的 TCP/IP 连接: C:\Users\cisco>adb -s 0bb39******9dcc8 tcpip 5555 restarting in TCP mode port: 5555 # 在命令行中看到 TCP mode port: 5555 就表示监听成功: # 进入手机设置-wifi,查看手机所连接的网络的ip地址 # 通过 connect 命令和 IP 地址以及端口号连接到目标手机 C:\Users\cisco>adb connect 172.20.10.13:5555 connected to 172.20.10.13:5555 # 当看到 connected to xxx:5555 的提示语就表示连接成功 # 拔掉USB线,验证一下,看到如下提示语,说明已成功打开了adb WiFi C:\Users\cisco>adb devices List of devices attached KBVO8******S8TYT device 172.20.10.13:5555 device # 输入adb命令操作设备,当有多个设备连接了电脑,导致adb无法识别操作具体哪台设备 C:\Users\cisco>adb shell adb.exe: more than one device/emulator # 执行命令adb -s 172.20.10.13:5555 shell,进入指定设备操作 C:\Users\cisco>adb shell hammerhead:/ $ exit # adb connect断开 C:\Users\cisco>adb disconnect disconnected everything C:\Users\cisco>adb devices List of devices attached # 结束adb服务 C:\Users\cisco>adb kill-server C:\Users\cisco>adb devices * daemon not running; starting now at tcp:5037 * daemon started successfully List of devices attached KBVO854LKBWS8TYT device # 通过 connect 命令和 IP 地址以及端口号重新连接到目标手机 C:\Users\cisco>adb connect 172.20.10.13:5555 connected to 172.20.10.13:5555
b. 方式2:通过 as的ADB WiFi Connect插件打开
不需要usb数据线连接手机进入adb shell,ADB WIFI apk已经帮我们执行了执行shell命令adb -s serial_number tcpip 5555
)python
https://www.jetbrains.com/pycharm/download/#section=windows
破解激活请百度
node --version
应用
才会生效下载地址:https://github.com/liaojack8/AndroidKiller
下载地址: https://www.52pojie.cn/thread-319641-1-1.html
3. 更新Apktool
下载地址: https://ibotpeaches.github.io/Apktool/
injectcode
。
dex,apk→>smali→java
dex,apk→>smali→java
查找用例
即可添加注释
即可.apk
,.zip
,.dex
,.jar
等格式的文件进行反编译。dex->smali->java
dex,apk→>smali→java
官网: https://www.pnfsoftware.com/
破解版:链接: https://pan.baidu.com/s/1dy140l1oPzeJdcnDxVYs_g?pwd=z3s1 提取码: z3s1
https://www.jetbrains.com/pycharm/download/#section=windows
python # 打开Py输入命令:
pip install frida # 默认安装最新版本,python3以上才能使用,有可能失败,安装提示下载,然后再执行命令重新安装
# pip install frida -i https://pypi.douban.com/simple 如果下载速度慢,可以用国内源,这个是豆瓣源
pip install frida-tools # CLI tools 默认会根据Frida版本,安装与之匹配的最新版本frida-tools
# npm install frida # Node.js使用这个命令
pip uninstall frida # 如果最新版本有问题,可以卸载python模块
pip uninstall frida-tools
pip install frida==15.2.2 # 要安装指定版本
pip install frida-tools==11.0.0 # frida-tools版本要和frida相对应,默认会根据Frida版本,安装与之匹配的最新版本frida-tools。如果需要安装指定具体的版本,可以访问https://github.com/frida/frida,选择好frida版本,对应的frida-tools会在同一个目录下,可以看到此时的版本号
4. 智能api提示 @todo
#坑/逆向/Android逆向/Magisk : adb shell 用su切换不了根用户,是因为Magisk没有给shell授权
frida --version # 查看电脑端的frida版本信息
adb shell getprop ro.product.cpu.abi # 查看手机cpu架构
# armeabi-v7a(32位ARM)
# arm64-v8a (64位ARM)
# x86 (32位x86)
# x86-64 (64位x86)
# frida-server下载地址:https://github.com/frida/frida/releases
# 下载安装frida server版本和`电脑端的frida版本`对应,cpu架构要和`设备cpu架构`对应
# 注意要解压
adb push D:\frida-server-16.0.8-android-arm\frida-server-16.0.8-android-arm /data/local/tmp/ # 把frida拷贝到手机的/data/local/tmp/目录下,在Android中,使用adb push命令推送文件到data目录一般需要root权限,但是/data/local/tmp/这个目录并不需要root权限,所以一般把文件push到测试机的/data/local/tmp目录下
adb shell chmod 777 /data/local/tmp/frida-server-16.0.8-android-arm # 可以直接adb shell下用命令改,也可以使用MT管理器修改
adb shell ls -l /data/local/tmp/frida-server-16.0.8-android-arm
-rwxrwxrwx 1 shell shell 21414856 2022-12-15 19:12 /data/local/tmp/frida-server-16.0.8-android-arm
没有任何回显报错信息
,就是启动成功了adb shell su ./data/local/tmp/frida-server-16.0.8-android-arm # 启动frida # 如果有报错可能是手机root不彻底,防火墙没有关闭 # 也有可能是frida-server版本不对 sailfish:/ # ./data/local/tmp/frida-server-16.1.8-android-arm64 {"type":"error","description":"Error: invalid address","stack":"Error: invalid address\n at Object.value [as patchCode] (frida/runtime/core.js:207:1)\n at ln (frida/node_modules/frida-java-bridge/lib/android.js:1209:1)\n at pn.activate (frida/node_modules/frida-java-bridge/lib/android.js:1275:1)\n at mn.replace (frida/node_modules/frida-java-bridge/lib/android.js:1323:1)\n at Function.set [as implementation] (frida/node_modules/frida-java-bridge/lib/class-factory.js:1185:1)\n at Function.set [as implementation] (frida/node_modules/frida-java-bridge/lib/class-factory.js:1099:1)\n at installLaunchTimeoutRemovalInstrumentation (/internal-agent.js:424:24)\n at init (/internal-agent.js:51:3)\n at c.perform (frida/node_modules/frida-java-bridge/lib/vm.js:12:1)\n at _performPendingVmOps (frida/node_modules/frida-java-bridge/index.js:250:1)","fileName":"frida/runtime/core.js","lineNumber":207,"columnNumber":1} sailfish:/ # getenforce Enforcing sailfish:/ # setenforce 0 sailfish:/ # getenforce Permissive sailfish:/ # ./data/local/tmp/frida-server-16.1.8-android-arm64
2. 进行端口转发
# Failed to enumerate processes: unable to connect to remote frida-server 如果hook的时候后续出现者错误,重新端口转发即可 adb forward tcp:27042 tcp:27042 # 将PC端的27042端口收到的数据,转发给到手机中27042端口。但是光执行这个命令还不能转发数据,还需要完成两个步骤才能传数据。这两个步骤是: # 1.在手机端,建立一个端口为27042的server,并打开server到监听状态。(adb forward tcp:27042 tcp:27042 可以在步骤1之前执行) # 2.在PC端,建立一个socket client端,连接到端口为27042的server上。 # 这两个步骤有先后顺序,步骤1要先执行。 # PC端应用 手机端应用 # | | # (1) (3) # | | # PC端server 手机端server # | | # (1) (3) # | | # adb.exe ----(2)---- 手机端adbd进程 # PC端的应用与手机端应用之间传输数据的过程: #(1)`PC端应用`将数据发送给端口为27042的`PC端server`(`adb.exe`创建的) #(2)`PC端adb.exe`将数据转发给`手机端adbd进程`(通过USB传输) #(3)`手机端adbd进程`将数据发送给端口为27042的`手机端server`(`手机端应用`创建的) # 传递是双向的,第(1)和第(3)步是通过socket实现的,所以通过socket的读和写就完成了PC端应用和手机端应用的数据传递。 # adb forward --list 查看当前建立的转发 # adb forward --remove tcp:27042 删除建立的转发
frida-ps -U # 验证一下frida是否使用正常
# frida -U -f com.che168.autotradercloud --no-pause
#坑/逆向/Android逆向/Frida/环境 frida-ps -U报错::是因为电脑连接了ipad,导致了这个问题,断开ipad问题解决
(.venv) E:\Share\Source\repos\crawler\7chezhiying>frida-ps -U
# Failed to enumerate processes: this feature requires an iOS Developer Disk Image to be mounted; run Xcode briefly or use ideviceimagemounter to mount one manually
# 是因为电脑连接了ipad,导致了这个问题,断开ipad问题解决
#坑/逆向/Android逆向/Frida/环境 frida-ps -U报错`usage: frida [options] target
frida: error: argument -p/–attach-pid: invalid parse_target value: ‘s’::怀疑跟Frida的版本有关系,Frida16.0.11才出现这个问题
#坑/逆向/Android逆向/Frida/环境 frida-server掉了,再启用时报错::尝试移除端口转发,依旧无法重新启动,可能是Frida-server进程还在跑,kill掉试试
adb shell "su -c ./data/local/tmp/frida-server-16.0.8-android-arm"
# Unable to start: Error binding to address 127.0.0.1:27042: Address already in use 可能是端口被占用,尝试移除端口转发
adb forward --list
# KBVO854LKBWS8TYT tcp:27042 tcp:27042
adb forward --remove tcp:27042
adb shell "su -c ./data/local/tmp/frida-server-16.0.8-android-arm"
# Unable to start: Error binding to address 127.0.0.1:27042: Address already in use 依旧无法重新启动,可能是Frida-server进程还在跑,kill掉试试
adb shell
su
ps -e | grep frida
# root 32367 513 41956 22948 poll_schedule_timeout 0 S frida-server-16.0.8-android-arm
kill -9 32367
ps -e | grep frida
./data/local/tmp/frida-server-16.0.8-android-arm
下载地址: https://www.hex-rays.com/
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1584115&highlight=ida
so->arm->c
Natvie
反编译工具so
库 ,DLL
同样可以反编译dex->jar→>java
dex->jar→>java
dex->jar→>java
dex->smali
编辑器
http://www.cygwin.com/install.html
#坑/mac/homebrew 需要挂代理才能下载 homebrew::使用国内镜像(中科院)即可解决
#坑/mac/homebrew/环境变量 homebrew安装软件后需要重新配置环境变量吗::安装 Homebrew 后,默认情况下,你可以直接在命令行中使用通过 Homebrew 安装的软件包,而不需要手动配置 $PATH
环境变量。尽量所有的软件都用homebrew管理比较好,可以自动更新或者卸载、版本管理
brew -v # 看一下是否已经安装了 # 使用国内镜像(中科院)即可解决 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" # 如果一旦失败,要先卸载homebrew在选择其他源去安装。 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)" brew -v # 安装成功就会看到内容 # 安装 git brew install git git version # 安装 iterm2. iTerm2 在界面、功能和定制化方面都比 macOS 自带的终端工具更加强大和灵活,可以提高工作效率和体验。 brew install --cask iterm2 # 怎么区分是当前终端是zsh还是bsah,两者有什么区别 echo $0 # -zsh # Mac默认使用zsh作为默认shell是因为在macOS Catalina版本中,Apple已经将默认shell从bash更改为zsh。这是因为zsh具有更多的功能和更好的性能,比如实时命令补全、插件支持、更好的自定义配置等。此外,zsh也更加现代化,更容易使用和学习。 # zsh和bash是两种常见的Unix/Linux shell,它们的主要区别在于以下几点: # 1. 命令补全:zsh的命令补全功能更加强大,支持更多的补全选项和自定义补全脚本。 # 2. 语法:zsh支持更多的语法特性,如数组的关联和扩展,更加灵活的参数替换等。 # 3. 兼容性:bash是Unix/Linux系统默认的shell,因此更加兼容各种操作系统和脚本。
#坑/mac/快捷操作/文件操作 mac如何显示隐藏文件::用命令
# 在终端窗口中输入以下命令
defaults write com.apple.finder AppleShowAllFiles -bool true
# 输入以下命令来重新启动“Finder”应用程序
killall Finder
.bash_profile
或 .bashrc
文件中进行配置。;
来分隔多个路径,而 macOS 使用冒号 :
来分隔多个路径。~/.bash_profile
和~/.zprofile
文件是用于Bash和Zsh shell的配置文件。它们在用户登录时加载,用于设置环境变量和启动一些需要在shell登录时运行的命令
。重新启动终端也会重新加载这些文件,因此更改这些文件后重新启动终端可以使更改生效。但是,在某些情况下,可能需要注销并重新登录才能使更改生效,因为某些系统可能会在登录时忽略这些文件的加载,而只在注销并重新登录时加载它们。其中,Bash使用.bash_profile
文件,而Zsh使用.zprofile
文件。~/.bashrc
和~/.zshrc
文件也是Bash和Zsh shell的配置文件,但它们不是用于登录时加载的,而是用于每次打开新的终端会话时加载。这些文件包含一些关于终端会话的设置,如颜色、自动补全、命令别名和其他Shell配置等
。/etc/bashrc
和/etc/zshrc
。# 环境变量只是存在当前的 shell 会话中,当这个 shell 会话关闭时,环境变量也随之销毁。所以,如果你想让代理设置在关闭终端后依然生效,可以将这两个命令添加到 `.bash_profile` 或者 `.zshrc` 等文件中,这样每次打开一个新的终端窗口时,都会自动执行这些命令,并设置代理,从而保证代理的持久性。
# 测试代理服务器是否可用
curl -I www.google.com --proxy http://192.168.31.31:1091
export http_proxy=http://192.168.31.31:1091;
export https_proxy=http://192.168.31.31:1091;
#坑/mac/代理 这个ip只在局域网内有效。因此,这个代理服务器只能在公司内网所在的局域网内使用。如果在局域网外,将无法使用这个代理服务器。还是挂自己的代理来配置环境靠谱。::但尝试挂自己代理反而homebrew报异常,输入以下这个命令即可。将这两个目录添加到Git的安全目录列表中,以解决Homebrew的警告问题。
git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask
#坑/mac/homebrew/pyenv pyenv 的安装目录安装错了,要安装到其他目录下应该怎么操作?::删除HOME/
目录,然后切换到目标的目录下重新下载安装pyenv,再修改$PATH
which pyenv # HOME/.pyenv/bin/pyenv. # 安装目录如果不在$HOME目录下,而是在特定的目录下。会导致很多不方便。比如在拉取另一个项目的代码,在这个新项目的目录下就无法使用pyenv rm -rf HOME cd ~ # curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash # 第一个命令是 `curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer`,它会从远程 URL 下载 pyenv-installer 脚本,并将其输出到终端。 # 第二个命令是 `bash`,它是一个 shell 程序,可以接收上一个命令的输出,并解释执行其中的命令。因此,这个命令的意思是将 pyenv-installer 脚本传递给 bash,然后由 bash 来执行这个脚本。这样就可以自动下载和安装 pyenv 工具了。 # 在使用 `zsh` 的情况下,如果你执行了 `bash` 的命令,那么系统会切换到 `bash` 环境下去执行,执行完成后又会返回 `zsh` 环境。这样来回切换环境,可能会对系统性能产生一定影响。但是,这种影响通常不会很明显,对于一般的用户来说是可以接受的。我的mac默认的是zsh,所以这里还是使用zsh比较好 curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | zsh # % Total % Received % Xferd Average Speed Time Time Time Current # # Dload Upload Total Spent Left Speed # # 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 # curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 7 ms: Connection refused # 如果下载不下来,那就手动创建一个,把脚本粘贴进去 touch pyenv.sh vim pyenv.sh zsh pyenv.sh # 正克隆到 'HOME/.pyenv/plugins/pyenv-update'... 致命错误:无法访问 'https://github.com/pyenv/pyenv-update.git/':HTTP/2 stream 1 was not closed cleanly before end of the underlying stream Failed to git clone https://github.com/pyenv/pyenv-update.git # 这个错误表示Git克隆命令未能完成,因为底层的HTTP/2流没有干净地关闭。可能的原因是网络连接中断或连接超时,或者GitHub服务器出现了问题。您可以尝试再次运行相同的命令,也可以尝试使用另一种协议(如SSH)进行克隆。把pyenv.sh脚本里面的http改成ssh或者不修改隔一段时间再试试,隔一段时间试试就可以了 # 将~/.zprofile改为`export PYENV_ROOT="$HOME/HOME/.pyenv"` vim ~/.zprofile # 设置环境变量 PYENV_ROOT="$HOME/HOME/.pyenv" source ~/.zprofile # ~/.zprofile:7: command not found: pyenv # 手动关闭终端重新进,让其生效,重新启动终端也会重新加载这些文件,因此更改这些文件后重新启动终端可以使更改生效。但是,在某些情况下,可能需要注销并重新登录才能使更改生效,因为某些系统可能会在登录时忽略这些文件的加载,而只在注销并重新登录时加载它们。
#坑/mac/pyenv 3.7.0、3.8.0在线/离线安装都安装不上,python3.9.0却可以::现在看来应该是Xcode和特定的Python版本之间兼容性问题
pyenv update # 切换到清华源 pyenv install --list # 查看可安装版本 # 安装指定版本 pyenv install 3.7.0 #Downloading Python-3.7.0.tar.xz... #-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz # 下载慢是卡在了这里,可以把它手动下载下来,放到~/.pyenv/cache下 ls ~/HOME/.pyenv/cache # ls: /Users/tiandongchen/HOME/.pyenv/cache: No such file or directory mkdir ~/HOME/.pyenv/cache # 没有就创建一个 mv ~/Downloads/Python-3.7.0.tar.xz ~/HOME/.pyenv/cache # 安装还是失败了 pyenv install 3.7.0 # python-build: use openssl@1.1 from homebrew # python-build: use readline from homebrew # Installing Python-3.7.0... # python-build: use readline from homebrew # python-build: use zlib from xcode sdk # BUILD FAILED (OS X 12.6.3 using python-build 20180424) # Inspect or clean up the working tree at /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230421192411.69494 # Results logged to /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230421192411.69494.log # Last 10 log lines: # checking for --with-cxx-main=<compiler>... no # checking for clang++... no # configure: # By default, distutils will build C++ extension modules with "clang++". # If this is not intended, then set CXX on the configure command line. # checking for the platform triplet based on compiler characteristics... darwin # configure: error: internal configure error for the platform triplet, please file a bug report # make: *** No targets specified and no makefile found. Stop. # 有可能是版本问题,试试3.8.0,还是失败了,看来不是下载的python源码问题 tiandongchen@WKS70241 ~ % wget https://npm.taobao.org/mirrors/python/3.8.0/Python-3.8.0.tar.xz -P ~/HOME/.pyenv/cache/ pyenv install 3.8.0 # 依旧安装不上```
“平台三元组的内部配置错误”,尽管使用带有修复程序的Pyenv版本(2.3.1) ·问题 #2393 ·pyenv/pyenv ·GitHub
找到这个答案,下载xcode本体就可以解决
Recently I had the same problem, I couldn’t install any python version with Pyenv on my M1 Pro. I tried lots of hacks mentioned in issues: patches, flags, reinstalling zlib, bzip and so on, resetting xcode-command-line-tools. Nothing worked. But then my friend told me I should install the Xcode itself from App Store. And lol, that worked!
Just install Xcode and run
(works with all latest revisions supported by pyenv such as 3.7.13, 3.8.13, 3.9.11, 3.10.3, etc.)pyenv install 3.7.13
Can’t install 3.10.0 on M1 Mac - error: internal configure error for the platform triplet, please file a bug report · Issue #2317 · pyenv/pyenv · GitHub
#坑/mac/Xcode App Store无法下载Xcode::手动下载Xcode下载地址: https://developer.apple.com/download/all/
sudo rm -rf /Library/Developer/CommandLineTools Password: ls /Library/Developer/CommandLineTools # ls: /Library/Developer/CommandLineTools: No such file or directory pyenv doctor # Cloning ~/.pyenv/plugins/pyenv-doctor/bin/..... # Installing python-pyenv-doctor... # python-build: use readline from homebrew # BUILD FAILED (OS X 12.6.3 using python-build 20180424) # Inspect or clean up the working tree at /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135 # Results logged to /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135.log # Last 10 log lines: # 正克隆到 'python-pyenv-doctor'... # 警告:--depth 在本地克隆时被忽略,请改用 file:// 协议。 # /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135/python-pyenv-doctor /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135 ~ # configure: WARNING: unrecognized options: --enable-shared # checking for gcc... clang # checking whether the C compiler works... no # configure: error: in `/var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135/python-pyenv-doctor': # configure: error: C compiler cannot create executables # See `config.log' for more details # xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools. # Problem(s) detected while checking system. # See https://github.com/pyenv/pyenv/wiki/Common-build-problems for known solutions. # 自动跳出重新安装xcode # 然后安装python 3.9.0是正常安装的 pyenv install 3.9.0 # python-build: use openssl@1.1 from homebrew # python-build: use readline from homebrew # Installing Python-3.9.0... # patching file Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst # patching file configure # patching file configure.ac # python-build: use readline from homebrew # python-build: use zlib from xcode sdk # Installed Python-3.9.0 to /Users/tiandongchen/.pyenv/versions/3.9.0 which python # ~/.pyenv/shims/python # 但安装3.7.0还是安装不上 # 也可以使用homebrew pycharm安装社区版,免费 brew install --cask pycharm-ce
brew install --cask adoptopenjdk # 下载速度很慢
java -version
# 使用加速器或代理服务器:在终端中执行以下命令,使用清华大学开源软件镜像站加速 Homebrew 的下载速度。
export HOMEBREW_BREW_GIT_REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
export HOMEBREW_CORE_GIT_REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/core.git
# 使用 Homebrew 的下载加速器:Homebrew 提供了一个下载加速器服务,可以将软件包下载速度提高数倍。在终端中执行以下命令启用下载加速器:
brew install --fast --verbose <formula> # 这里的 `<formula>` 是需要安装的软件包,例如 JDK。注意,下载加速器服务仅适用于 Homebrew 的公式库(formula),并不适用于外部软件包或 Homebrew Cask 应用程序
# 手动下载安装包:如果以上方法仍然不能满足需求,可以尝试手动下载 JDK 的安装包,并使用 Homebrew 进行安装。可以从官方网站或其他可靠的源站下载 JDK 安装包,然后使用以下命令在本地安装:
brew install --cask /path/to/jdk.pkg
#坑/mac/jdk OpenJDK和JDK不是同一个东西,所以不能用homebrew安装::去官网下载( https://www.oracle.com/java/technologies/downloads/macos-big-sur-arm64-downloads.html ),安装之后,在更新环境变量。
brew install --pkg ~/workspace/scripts/dmg/java/JDK 17.0.7.pkg # 双击之后发现里面有一个pkg,这里直接用homebre安装,会自动更新环境变量,也方便管理,但这里brew不支持--pkg参数,所以这里只能双击dmg,然后双击pkg安装jdk了,手动修改环境变量,后续更新也需要手动维护
which java
# /usr/bin/java
java -version
echo $(/usr/libexec/java_home)
# /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
echo 'export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home"' >> ~/.zprofile
source ~/.zprofile
# brew 无法指定版本,默认是下载最新的版本
(py390) tiandongchen@WKS70241 proxy % brew install --cask android-studio
==> Downloading https://redirector.gvt1.com/edgedl/android/studio/install/2022.
==> Downloading from https://r4---sn-j5o7dn7e.gvt1.com/edgedl/android/studio/in
######################################################################## 100.0%
==> Installing Cask android-studio
==> Moving App 'Android Studio.app' to '/Applications/Android Studio.app'
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/989056
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。