从源码构建Frida编译环境:解决Android定制与兼容性问题
1. 项目概述为什么我们需要一个自定义的Frida编译环境如果你正在阅读这篇文章大概率已经和Frida打过交道了。无论是移动安全分析、应用动态插桩还是逆向工程Frida都是一个绕不开的神器。它那句“Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers”的标语精准地概括了它的能力。然而直接从官方渠道下载预编译的frida-server或frida-gadget对于深入研究者来说往往只是开始。当我们需要针对特定场景进行定制比如修改默认行为、绕过某些检测机制或者集成最新的实验性功能时一个从源码开始的、可控的编译环境就变得至关重要。我遇到过不少情况目标应用使用了最新的反调试技术常规的Frida注入会被立刻感知并崩溃或者我需要一个特定架构比如arm64-v8a的frida-gadget但官方发布的版本与我目标Android系统的linker或libc存在微妙的兼容性问题。这时候从零搭建编译环境自己动手编译出符合需求的二进制文件就成了解决问题的唯一途径。这个过程听起来有些硬核但实际操作下来只要环境配置得当步骤清晰并没有想象中那么困难。本指南将带你一步步走通在Linux环境下以Ubuntu 20.04/22.04 LTS为例搭建Frida完整编译环境的全过程并分享我在这个过程中踩过的坑和积累的经验。2. 编译环境整体设计与依赖解析搭建Frida编译环境本质上是在构建一个能够编译跨平台主要是Android和Linux原生C/C代码、Python绑定以及JavaScript运行时V8引擎的复杂工具链。Frida的核心组件如frida-core、frida-gum、frida-python等相互依赖构建系统主要基于meson和ninja。我们的目标不仅仅是能make通过更是要建立一个稳定、可复现的构建流程。2.1 核心依赖项梳理与安装Frida的编译依赖可以分为几个层次系统基础工具链、平台SDK特别是Android NDK、Python开发环境以及Node.js用于构建某些前端工具。遗漏任何一项都可能导致编译过程在奇怪的地方卡住。首先更新系统包管理器并安装最基础的编译工具和库。这一步是地基必须打牢。sudo apt update sudo apt upgrade -y sudo apt install -y \ git \ build-essential \ python3-dev \ python3-pip \ python3-setuptools \ meson \ ninja-build \ pkg-config \ libtool \ automake \ autoconf \ gettext \ libssl-dev \ libffi-dev \ curl \ wget \ unzip \ rsync注意meson和ninja是Frida构建系统的核心。确保安装的meson版本不要太旧建议≥0.56.0否则可能无法正确解析Frida的meson.build文件。Ubuntu仓库的版本有时滞后如果编译报错与meson相关可以考虑用pip3 install meson来安装更新版本。接下来是Android编译环境。这是编译Android平台frida-server和frida-gadget的必需品。我们需要Android NDK。# 创建一个用于存放SDK的目录 mkdir -p ~/android-sdk cd ~/android-sdk # 下载并解压Android NDK。这里以r25c为例版本需与Frida代码兼容。 # 建议从官方或可靠镜像站下载。你可以替换为最新的稳定版本。 wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip unzip android-ndk-r25c-linux.zip # 设置环境变量这是关键一步让构建系统知道去哪里找交叉编译工具链。 echo export ANDROID_NDK_ROOT~/android-sdk/android-ndk-r25c ~/.bashrc echo export PATH$ANDROID_NDK_ROOT:$PATH ~/.bashrc source ~/.bashrc实操心得NDK版本与Frida源码的兼容性需要留意。Frida的releng目录下通常有配置文件指定了期望的NDK版本或API级别。如果编译Android目标时出现“找不到工具链”或“API级别不支持”的错误第一反应就是检查NDK版本。使用r25c或r26b这类LTS版本通常比较稳妥。然后是Node.js环境。Frida的某些构建脚本比如用于生成类型定义文件可能需要Node。# 使用NodeSource维护的仓库安装Node.js 18.x LTS版本 curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs node --version # 验证安装应输出v18.x.x最后确保Python环境就绪。Frida的Python绑定frida-python是很多脚本的入口。python3 --version pip3 install --upgrade pip # 预先安装一些可能用到的Python包 pip3 install wheel setuptools2.2 源码获取与目录结构认知我们不直接克隆主仓库因为Frida采用了“monorepo”单体仓库结构所有子模块frida-core,frida-gum,frida-python等都在同一个仓库里。这有利于协同开发和版本管理。# 克隆Frida官方仓库推荐使用--depth1加快克隆速度因为我们通常只需要最新代码。 git clone --depth1 https://github.com/frida/frida.git cd frida进入frida目录后你会看到如下主要子目录理解它们有助于定位问题frida-core/: Frida的核心服务包含frida-server和frida-gadget的代码。frida-gum/: “Gum”是Frida的底层插桩框架GNU-like Universal Machine用C编写是跨平台的基石。frida-python/: Python语言绑定。frida-node/: Node.js语言绑定。releng/: 发布工程release engineering配置包含各种构建脚本、工具链配置和Dockerfile。这是我们构建的“参考手册”。build/: 通常作为构建输出的目录可能需要手动创建。subprojects/: Meson的wrap文件管理的子项目依赖如libnice、json-glib等。在开始编译前强烈建议花几分钟阅读releng/目录下的README.md或相关脚本了解官方推荐的构建流程和前置条件。3. 核心编译流程详解与实操Frida的编译采用meson配置ninja编译的组合。我们将采用“先编译本地host版本的工具再交叉编译目标target版本”的策略。本地版本用于运行一些在构建过程中需要的工具程序。3.1 构建本地Host工具链首先我们需要编译出能在当前Linux系统上运行的Frida核心工具特别是frida-compile等它们在后续交叉编译过程中会被用到。# 在frida源码根目录下创建一个用于host构建的目录 mkdir -p build-host cd build-host # 使用meson配置构建。--buildtyperelease表示编译发布版本优化程度高。 # --prefix/usr/local 指定安装路径这里我们先仅构建不安装。 meson setup \ --buildtyperelease \ --prefix/usr/local \ .. # 开始编译。使用-j参数指定并行任务数通常设为CPU核心数以加快速度。 # 例如8核机器可以用 -j8 ninja -j$(nproc)这个过程会编译frida-core、frida-gum等核心库的本地版本以及frida-compile、frida-laboratory等工具。耗时可能较长取决于机器性能。如果一切顺利你会在build-host/目录下看到生成的各种二进制文件和库。踩坑记录最常见的错误是依赖缺失。Meson在配置阶段会检查大量依赖。如果报错“Dependency ‘xxx’ not found”你需要根据错误信息安装对应的开发包。例如libssl-dev、libffi-dev我们已经装了但可能还会缺libcap-dev、libdwarf-dev等。请根据提示使用apt search和apt install来补齐。另一个常见问题是Python扩展模块编译失败确保python3-dev已安装并且pip版本较新。3.2 交叉编译Android目标文件这是我们的重头戏编译出能运行在Android设备上的frida-server和frida-gadget。我们需要使用Android NDK进行交叉编译。Frida在releng目录下提供了便利的构建脚本。我们可以参考它但更推荐手动执行meson交叉编译配置以理解整个过程。# 回到frida源码根目录 cd /path/to/frida # 创建一个专门用于Android构建的目录 mkdir -p build-android cd build-android接下来是关键的一步为meson配置交叉编译文件cross file。这个文件告诉meson目标系统的信息、编译器路径、编译标志等。我们可以基于NDK自动生成一个基础的cross file。# 假设你的NDK路径是 ~/android-sdk/android-ndk-r25c NDK_PATH~/android-sdk/android-ndk-r25c # 选择目标架构这里以 arm64 (aarch64) 为例这也是目前主流手机架构。 ARCHarm64 # 选择Android API级别建议不低于21Android 5.0。 API21 # 使用NDK中的make_standalone_toolchain.py脚本生成一个独立工具链更易用。 # 注意NDK r23以后推荐使用内置的cmake工具链文件但Frida的meson构建可能更适应独立工具链。 # 如果使用NDK r25可以尝试直接使用其内置的LLVM工具链。 TOOLCHAIN_BIN$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin # 设置交叉编译环境变量 export CC$TOOLCHAIN_BIN/aarch64-linux-android$API-clang export CXX$TOOLCHAIN_BIN/aarch64-linux-android$API-clang export AR$TOOLCHAIN_BIN/llvm-ar export STRIP$TOOLCHAIN_BIN/llvm-strip export PKG_CONFIG_LIBDIR/usr/lib/aarch64-linux-gnu/pkgconfig # 这个路径可能不存在交叉编译时pkg-config需要特殊处理 # 由于直接设置环境变量对meson内部所有子项目生效可能不彻底更可靠的方式是创建cross file。 # 创建一个android_arm64.txt文件 cat android_arm64.txt EOF [binaries] c $TOOLCHAIN_BIN/aarch64-linux-android$API-clang cpp $TOOLCHAIN_BIN/aarch64-linux-android$API-clang ar $TOOLCHAIN_BIN/llvm-ar strip $TOOLCHAIN_BIN/llvm-strip pkgconfig pkg-config [host_machine] system android cpu_family aarch64 cpu armv8-a endian little [properties] # 可能需要设置一些属性如sysroot但meson和NDK clang通常能自动处理。 EOF # 现在使用这个cross file来配置meson # 注意我们设置了 --cross-file并且指定了 -Dandroid_ndk 路径有些Frida构建需要这个。 meson setup \ --buildtyperelease \ --cross-file android_arm64.txt \ -Dandroid_ndk$NDK_PATH \ -Dandroid_api_level$API \ --prefix/data/local/tmp \ # Android设备上的临时安装路径仅作参考 ../ # 开始编译Android目标 ninja -j$(nproc)这个过程会比编译host版本更久因为它需要为Android目标重新编译所有C/C代码包括V8引擎。如果编译成功你会在build-android/目录下的lib/子目录中找到libfrida-gadget.so在bin/子目录中找到frida-server可能需要从生成的中间文件中寻找有时名字可能带后缀。核心技巧如果上述手动配置cross file遇到困难一个更简单的方法是直接使用Frida自带的releng脚本。在frida/releng目录下运行./toolchain.py --help查看帮助。通常你可以运行./toolchain.py android-arm64来为指定架构准备环境。然后在frida根目录使用make -f Makefile.sdk.mk FRIDA_HOSTandroid-arm64如果存在或者参考releng/docker/中的Dockerfile来执行构建。官方CI/CD流程通常基于这些脚本可靠性最高。3.3 编译Python绑定frida-python编译好核心库后我们还需要编译Python绑定这样我们才能在PC上使用import frida来编写控制脚本。Python绑定的编译依赖于刚刚编译好的本地hostfrida-core库。我们需要告诉它本地库和头文件的位置。# 回到frida源码根目录 cd /path/to/frida # 进入python绑定目录 cd frida-python # 清理可能的旧构建 rm -rf build/ # 使用pip从本地源码安装。关键是指定FRIDA_CORE_DEVKIT环境变量。 # 这个变量指向包含头文件和库文件的目录。我们使用之前编译的host版本。 FRIDA_CORE_DEVKIT/path/to/frida/build-host meson-install # 注意frida-python的构建可能使用了一套自定义脚本。更通用的方法是 FRIDA_CORE_DEVKIT/path/to/frida/build-host pip3 install . --verbose # 或者如果存在setup.py: # FRIDA_CORE_DEVKIT/path/to/frida/build-host python3 setup.py installFRIDA_CORE_DEVKIT目录应包含lib/pkgconfig/里面有frida-core-1.0.pc等文件和include/目录。pip或setup.py会利用这些信息来编译链接Python C扩展模块。安装成功后在Python中测试import frida print(frida.__version__)如果成功输出版本号说明Python绑定安装成功。4. 产物提取与部署测试编译完成后我们需要从构建目录中提取出最终需要的二进制文件。4.1 提取Android版frida-server与frida-gadget对于Android我们最关心两个文件frida-server运行在Android设备通常是root过的上的守护进程允许PC端连接并控制。frida-gadget一个动态库.so文件可以注入到目标进程中实现无frida-server的插桩。# 假设你的Android构建目录是 /path/to/frida/build-android cd /path/to/frida/build-android # 查找frida-server。它可能被编译成不同的名字或放在子目录。 # 使用find命令定位 find . -name frida-server* -type f -executable | grep -v .so | head -5 # 常见的路径可能是 ./bin/frida-server 或 ./[something]/frida-server # 查找frida-gadget find . -name *gadget*.so -type f | head -5 # 常见的路径可能是 ./lib/libfrida-gadget.so 或 ./subprojects/gum/tmp-android-.../libfrida-gadget.so # 复制出来并重命名为标准名称 # 例如找到server在 ./bin/frida-server cp ./bin/frida-server ~/frida-server-android-arm64 # 找到gadget在 ./lib/libfrida-gadget.so cp ./lib/libfrida-gadget.so ~/libfrida-gadget-arm64.so # 为Android设备压缩一下可选 cd ~ gzip -k frida-server-android-arm644.2 部署到Android设备进行测试将编译好的frida-server推送到Android设备并启动测试。# 连接你的Android设备确保adb已安装且设备已授权 adb devices # 推送frida-server到设备的临时目录并赋予可执行权限 adb push ~/frida-server-android-arm64 /data/local/tmp/ adb shell chmod 755 /data/local/tmp/frida-server-android-arm64 # 在设备上启动frida-server需要root权限 adb shell su -c /data/local/tmp/frida-server-android-arm64 # 在PC端使用frida-ps检查连接是否成功 frida-ps -U如果frida-ps -U能列出设备上运行的进程列表恭喜你自编译的frida-server工作正常这意味着整个编译环境、交叉编译工具链以及核心代码的构建都是成功的。4.3 使用自编译的Gadget对于frida-gadget使用方法多样。一种常见方式是在逆向分析时将libfrida-gadget.so重命名并放入APK的lib/目录或者通过ptrace等方式注入。这里简单演示如何测试其基本功能是否正常你可以编写一个包含Gadget的简单测试程序或者直接使用Frida的frida-create工具如果已编译来创建一个测试应用。由于这部分涉及具体应用场景和更复杂的注入技术超出了环境搭建的范围但确保你编译出的.so文件是有效的至关重要。一个快速的检查方法是使用file命令和readelf命令查看其ELF头信息确认架构正确ARM aarch64并且是动态链接的共享库。file ~/libfrida-gadget-arm64.so readelf -h ~/libfrida-gadget-arm64.so | grep Machine5. 常见编译问题与深度排查指南即便按照步骤操作编译过程也可能遇到各种问题。这里我汇总了几个最具代表性的“坑”及其解决方案。5.1 依赖库缺失或版本不兼容问题现象meson setup阶段失败提示“Dependency ‘xxx’ not found”或“Found version ‘A.B.C’ but need ‘X.Y.Z’”。排查思路确认包名Linux下开发库的包名通常是libxxx-dev。用apt search libxxx查找。安装开发包sudo apt install libxxx-dev。版本问题如果要求特定版本而系统仓库版本过低考虑从源码编译该依赖并安装到自定义路径如/usr/local然后通过PKG_CONFIG_PATH环境变量让pkg-config找到它。例如Frida可能需要较新版本的libdwarf。# 示例编译安装libdwarf wget [libdwarf源码地址] tar -xzf libdwarf-xxx.tar.gz cd libdwarf-xxx ./configure --prefix/usr/local make sudo make install export PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH检查pkg-config有时库安装了但.pc文件不在标准搜索路径。使用pkg-config --list-all | grep xxx查看是否找到。5.2 Android NDK工具链问题问题现象交叉编译时报错“unrecognized command line option ‘-mfloat-abihard’”、“target triple not found”或链接阶段找不到-landroid等库。排查思路NDK版本这是首要怀疑对象。确保使用的NDK版本与Frida代码兼容。查看frida/releng/docker/下的Dockerfile里面通常会指定NDK版本。切换到指定或相近的LTS版本。独立工具链 vs 内置工具链NDK r19以后Google推荐直接使用NDK目录下的LLVM工具链$NDK/toolchains/llvm/...而不是用make_standalone_toolchain.py生成独立工具链。Frida的meson构建可能对后者支持更好。如果你用内置LLVM工具链出错可以尝试生成独立工具链。# 生成独立工具链NDK r25可能已不推荐但可尝试 $NDK_PATH/build/tools/make_standalone_toolchain.py \ --arch arm64 \ --api $API \ --install-dir /tmp/android-toolchain-arm64 # 然后使用 /tmp/android-toolchain-arm64/bin 下的编译器Cross File配置仔细检查cross file中的编译器路径、系统名称system android、CPU家族cpu_family aarch64是否正确。可以参考NDK提供的cmake工具链文件$NDK/build/cmake/android.toolchain.cmake中的逻辑。5.3 编译过程中内存不足或磁盘空间不足问题现象编译V8引擎或进行大量链接时进程被杀死OOM或者ninja报错“No space left on device”。排查思路内存编译V8非常消耗内存建议至少有8GB以上可用内存。如果内存不足可以尝试增加交换空间swap。# 创建一个4GB的交换文件 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久添加编辑 /etc/fstab磁盘空间完整构建Frida包括host和多个Android架构可能需要超过20GB的磁盘空间。确保/tmp和源码所在分区有足够空间。可以通过ninja -j2减少并行任务数来降低瞬时内存和IO压力。CCache如果经常编译可以启用ccache来加速后续编译但这需要额外磁盘空间缓存。在meson setup时添加-Db_use_ccachetrue。5.4 Python绑定编译失败问题现象在frida-python目录执行pip install .时编译C扩展失败报错“frida-core.h: No such file or directory”或链接错误“undefined reference to gum...’”。排查思路FRIDA_CORE_DEVKIT路径确保这个环境变量指向的是host版本的构建目录build-host并且该目录下确实有include/frida-core.h和lib/pkgconfig/frida-core-1.0.pc等文件。路径必须是绝对路径。PKG_CONFIG_PATH有时需要将host构建目录的pkgconfig路径加入PKG_CONFIG_PATH。export PKG_CONFIG_PATH/path/to/frida/build-host/lib/pkgconfig:$PKG_CONFIG_PATH cd frida-python pip3 install . --verbose清理重建彻底删除frida-python目录下的build/、dist/目录和*.egg-info/目录然后重试。检查Python环境确保你使用的python3、pip3和正在编译的Python绑定版本匹配。避免在虚拟环境内外混淆。5.5 针对“反Frida”检测的编译选项探讨这是当前的一个热点。许多安全应用会检测Frida的存在常见手段包括检测特定字符串、端口、文件特征、内存映射等。从源码编译为我们提供了对抗这些检测的天然优势我们可以修改默认特征。注意以下讨论仅用于学习加固原理请在合法授权范围内进行测试。修改默认端口frida-server默认监听27042端口。检测器可能会扫描这个端口。我们可以在编译前修改源码中的默认端口。定位文件通常在frida-core/的某个子目录下如frida-core/server/server.vala或相关C源码中搜索27042。修改并重新编译。这需要一定的代码阅读能力。混淆字符串Frida的库和二进制文件中包含许多特征字符串如“LIBFRIDA”、“GUMJS”等。简单的检测会搜索这些字符串。我们可以在编译配置中尝试添加编译选项来移除或混淆调试符号但核心字符串可能硬编码在源码中。更彻底的方法是手动修改这些字符串常量同样需要阅读源码。使用EBPF进行观测和绕过检测最新的网络热词提到了“使用ebpf观测frida检测”。eBPF是一种内核技术可以用于动态追踪和监控。理论上eBPF可以用于观测应用检测Frida的行为如检查了哪些文件、端口、调用了哪些系统调用从而帮助我们设计更隐蔽的注入或执行方式。但这已经超出了编译环境搭建的范畴进入了高级对抗领域。从编译角度确保你的Linux内核支持eBPF并且编译Frida时没有禁用相关依赖Frida本身可能在某些特性上使用eBPF目前主流Frida似乎不直接依赖eBPF但你的定制工具可以结合eBPF。重要提醒修改Frida源码以绕过检测属于深度定制可能会引入不稳定因素并且需要持续跟进官方更新。对于大多数研究和测试工作使用官方版本在隔离环境中进行已经足够。自编译环境的主要价值在于理解框架、解决兼容性问题和进行合法的深度定制研究。搭建自己的Frida编译环境就像拥有了一个武器工坊。你不仅能在出现兼容性问题时自力更生更能深入理解这个强大工具的脉络为应对更复杂的安全分析场景打下坚实基础。整个过程虽然繁琐但每一次成功的编译都是对底层工具链和移动安全架构的一次深刻对话。希望这篇指南能帮你顺利走通这条路。

相关新闻

本地部署AI代码助手Codex Taste:从环境配置到集成实践

本地部署AI代码助手Codex Taste:从环境配置到集成实践

这次我们来看一个名为 Codex Taste 的项目。从名称上看,它很可能与代码生成、代码质量评估或AI编程助手相关。这类工具的核心价值在于,能否在本地环境中稳定运行,提供高效的代码补全、审查或风格建议,并且对硬件资源的要求是否友好。 对于开发者而言,一个本地化的代码智…

2026/7/28 18:37:14 阅读更多 →
跨域问题

跨域问题

跨域是什么? 为什么要跨域? 跨域引发了哪些问题? 为什么会有这些跨域问题? 如何解决这些跨域问题? 以下内容主要是回答上面的几个问题。 1、跨域是什么? 跨域,简单来说,就是指从一个…

2026/7/28 18:37:14 阅读更多 →
WPS条件格式全解析:从基础操作到行业实战

WPS条件格式全解析:从基础操作到行业实战

1. WPS条件格式:从基础应用到高阶技巧全解析 作为一款国民级办公软件,WPS表格的条件格式功能远比大多数人想象的更强大。我在金融数据分析岗位上使用WPS近8年,处理过上万张数据表,条件格式是我每天必用的效率工具。不同于简单的颜…

2026/7/28 18:37:14 阅读更多 →

最新新闻

MySQL 如何判断一个数据库是不是出问题了?

MySQL 如何判断一个数据库是不是出问题了?

深入剖析 MySQL 健康检查:如何判断一个数据库是不是出问题了? 在数据库运维中,“数据库出问题了”是一个模糊但紧急的表述。它可能意味着服务无响应、主从同步中断、查询慢如蜗牛,或是底层磁盘已满。作为技术专栏作者,…

2026/7/28 18:47:17 阅读更多 →
克隆是什么

克隆是什么

什么是对象克隆一个业务逻辑,需要一个新的对象,但是类型和值都是之前的,也就是说,新状态和之前完全一样。使用new和赋值语句或者set注入都是可以的,但是,这会花费大量开销去做,效率低&#xff0…

2026/7/28 18:47:17 阅读更多 →
编程 MD(d)、MT(d)编译选项的区别

编程 MD(d)、MT(d)编译选项的区别

1.各个选项代表的含义 编译选项 包含 静态链接的lib 说明 /MD _MT、_DLL MSVCRT.lib 多线程、Release、DLL版本的运行时库 ---只能用于Release版本 /MDd _DEBUG、_MT、_DLL MSVCRTD.lib 多线程、Debug、DLL版本的运行时库 ----只能用于Debug版本 /MT _MT LIBCM…

2026/7/28 18:47:17 阅读更多 →
TPIC7710EVM评估模块:汽车电子驻车制动ASIC硬件设计与GUI调试实战

TPIC7710EVM评估模块:汽车电子驻车制动ASIC硬件设计与GUI调试实战

1. 项目概述与EVM核心价值在汽车电子,特别是车身控制和安全系统领域,评估模块(EVM)是连接芯片规格书与实际系统应用的桥梁。对于像TPIC7710这样的电子驻车制动(EPB)专用集成电路(ASIC&#xff0…

2026/7/28 18:47:17 阅读更多 →
cf----2019-09-01( Appending Mex,Changing Array,Candies Distribution)

cf----2019-09-01( Appending Mex,Changing Array,Candies Distribution)

人群淹没,你我不及诉说。一声雁过,往事如昨。只望离别不多,再赏盛世烟火。 Initially Ildar has an empty array. He performs nn steps. On each step he takes a subset of integers already added to the array and appends the mex of t…

2026/7/28 18:47:17 阅读更多 →
3步轻松备份:GetQzonehistory帮你完整导出QQ空间全部历史说说

3步轻松备份:GetQzonehistory帮你完整导出QQ空间全部历史说说

3步轻松备份:GetQzonehistory帮你完整导出QQ空间全部历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾为QQ空间里那些珍贵的青春回忆无法完整保存而烦恼&…

2026/7/28 18:46:17 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻