---
# System prepended metadata

title: 編譯Frida

---

工作目錄在 `~/Projects/frida` 
1. 下載NDK [[25以後舊版](https://github.com/android/ndk/wiki/Unsupported-Downloads)],[[最新版](https://developer.android.com/ndk/downloads?hl=zh-tw)]
    ```bash
    mkdir -p Android && cd Android 
    mkdir -p Ndk && cd Ndk
    wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip 
    unzip android-ndk-r25c-linux.zip 
    rm android-ndk-r25c-linux.zip
    #frida 只支援25版本)
    ```
2. 設定 ANDROID_NDK_ROOT
    ```bash
    vim ~/.bashrc
   #加入 export ANDROID_NDK_ROOT=$HOME/Android/Ndk/android-ndk-r25c
    source ~/.bashrc
    ```
3. 安裝編譯套件
    ```bash
    sudo apt-get install build-essential curl git lib32stdc++-9-dev \
    libc6-dev-i386 nodejs npm python3-dev python3-pip
    #sudo apt-get install npm
    #sudo apt install python3-pip
    #pip3 install colorama prompt-toolkit pygments
    #sudo apt-get install gcc-multilib g++-multilib
    #sudo -H pip3 install meson ninja
    #sudo apt install gcc g++ #原fedora的
    #meson通过pkg-config找到系统自带的libffi库的, 因此需要先安装pkg-config
    #sudo apt install pkg-config 
    #让meson找到系统自带的libffi，而不是去编译/frida-home/frida/frida-gum/subprojects/libffi/
    #sudo apt install libffi8 libffi-dev -y 
   
4. 安装nodejs环境，由于这里使得 frida-gum默认编译gumjs，因此需要安装nodejs环境
   ```bash
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
    source ~/.bashrc
   ```
5. 用nvm安装nodejs

    ```bash
    nvm ls-remote
    nvm install v18.18.2
    nvm use v18.18.2
    which node #/root/.nvm/versions/node/v14.17.1/bin/node
    which npm #/root/.nvm/versions/node/v14.17.1/bin/npm
    ```
   
6. 抓程式碼
    由於包含多項模組所以建議用git參數submodules全部抓取
    ```bash
    git clone --recurse-submodules https://github.com/frida/frida.git
    ```

7. 編譯
    ```bash
    make #查看編譯項目
    # 編譯gum hook框架
    make gum-android-arm   # arm架構
    make gum-android-arm64 # arm64架構
    
    # 編譯主要程式 gum-graft、frida-server、frida-protal、frida-inject
    make core-android-arm 
    make core-android-arm64
    ```
    > 編譯結果預設都在./firda/build/frida-android-XXXX/bin 路徑下。(XXXX CPU架構)

- frida-gadget.so 路徑
    ./firda/build/frida-android-arm/lib/frida/32/frida-gadget.so
    ./firda/build/frida-android-arm64/lib/frida/64/frida-gadget.so
